Web アプリのサンプルをダウンロード | GitHub でコードを表示: Default.aspx.cs | Redirect.aspx.cs

この記事では、Power BI Web アプリを認証する方法について説明します。 C# のサンプルが含まれていますが、認証プロセスは他の Web プログラミング言語と同じです。 GitHub に Web アプリのサンプルがあります。 サンプルを実行する方法については、Web アプリのサンプルに関する記事をご覧ください。

Power BI Web アプリは、Active Directory (AAD) を使用してユーザーを認証し、アプリケーションを保護します。 認証は、アプリやユーザーを識別するプロセスです。 AAD で Web アプリを識別するには、AAD にアプリを登録します。 AAD に Web アプリを登録する際に、自分のアプリに Power BI REST API リソースへのアクセス権を付与します。 Power BI Web アプリを登録する方法については、「アプリケーションを登録する」をご覧ください。

Azure Active Directory (Azure AD) の承認フローについて詳しくは、「認証コード付与フロー」をご覧ください。

Power BI では、アプリは、Microsoft Azure 管理ポータルを使用してマルチテナント アプリとして作成されます。

Power BI Web アプリの認証に必要なもの

次に、Power BI Web アプリを認証し、REST Web 要求を実行する手順を示します。 これらの手順は、ASP.NET Web アプリに適用されますが、他のプラットフォームにも適用できます。 Azure AD の OAuth 2.0 について詳しくは、「Azure AD の OAuth 2.0」をご覧ください。

手順 1 - Web アプリを登録する

Azure Active Directory に Web アプリを登録するときに、Power BI REST API リソースにアプリのアクセス権を付与します。 Power BI Web アプリを登録する方法については、「アプリケーションを登録する」をご覧ください。

手順 2 - Azure AD で認証するように Power BI の設定を構成する

次に、Azure AD で Power BI Web アプリを認証する必要がある設定を示します。

設定 説明
クライアント ID クライアント ID は、アプリケーションによって使用され、アクセス許可を要求しているユーザーを識別します。 Power BI アプリのクライアント ID を入手する方法については、「アプリケーションを登録する」をご覧ください。
クライアント シークレット Web API を呼び出すために、認証時にクライアント ID と共に Azure AD に送信されるクライアント シークレット キー。 Power BI アプリの秘密鍵を入手する方法については、「アプリケーションを登録する」をご覧ください。
リソース URI 承認する Power BI リソースへのリソース URI。 これとまったく同じ URI を使用する必要があります。 https://analysis.windows.net/powerbi/api
オーソリティ URI オーソリティ URI は、クライアント ID を使用してアクセス トークンを取得する Azure のリソースです。 https://login.windows.net/common/oauth2/authorize
リダイレクト URL Web アプリの URL のリダイレクト URL。 Azure AD サービスは、認証コードを使用して Web アプリの URL にリダイレクトします。 例: http://localhost:13526/Redirect

手順 3 - クエリ文字列を作成して Azure AD から認証コードを取得する

Power BI Web アプリを認証するには、まず、Azure AD 認証サービスにリダイレクトする URL クエリ文字列を作成します。 有効な資格情報を提供すると、Azure AD は認証コードを返します。 次に、クエリ文字列を使用した完全な Azure AD の URL の例を示します。 これに似た URL を使用して、Azure AD から認証コードを取得します。 Response.Redirect() を使用して Azure AD サービスにリダイレクトすると、Azure AD から認証コードが返されます。 手順 4 の認証コードを使用して、認証コードによってアクセス トークンを取得します。

https://login.windows.net/common/oauth2/authorize
  ?response_type=code
  &client_id=1861585d...9a79c296
  &resource= https://analysis.windows.net/powerbi/api
  &redirect_uri= http://localhost:13526/Redirect

Power BI 認証クエリ文字列の設定

設定 説明
response_type=code Azure AD は認証コードを返します。
client_id=1861585d...9a79c296 クライアント ID は、アプリケーションによって使用され、アクセス許可を要求しているユーザーを識別します。 Azure アプリを登録するときに、クライアント ID を取得します。
resource= https://analysis.windows.net/powerbi/api 承認する Power BI リソースへのリソース URI。 これとまったく同じ URI を使用する必要があります。
redirect_uri= http://localhost:13526/Redirect ユーザーが認証されると、Azure AD は Web アプリにリダイレクトします。

次に、クエリ文字列を使用して Azure AD 認証 URL を作成し、Azure AD オーソリティ サービスにリダイレクトする C# コード サンプルを示します。

例 - C# のサインイン

    protected void signInButton_Click(object sender, EventArgs e)
    {
        //Create a query string
        //Create a sign-in NameValueCollection for query string
        var @params = new NameValueCollection
        {
            //Azure AD will return an authorization code.
            //See the Redirect class to see how "code" is used to AcquireTokenByAuthorizationCode
            {"response_type", "code"},

            //Client ID is used by the application to identify themselves to the users that they are requesting permissions from.
            //You get the client id when you register your Azure app.
            {"client_id", Properties.Settings.Default.ClientID},

            //Resource uri to the Power BI resource to be authorized
            {"resource", "https://analysis.windows.net/powerbi/api"},

            //After user authenticates, Azure AD will redirect back to the web app
            {"redirect_uri", "http://localhost:13526/Redirect"}
        };

        //Create sign-in query string
        var queryString = HttpUtility.ParseQueryString(string.Empty);
        queryString.Add(@params);

        //Redirect authority
        //Authority Uri is an Azure resource that takes a client id to get an Access token
        string authorityUri = "https://login.windows.net/common/oauth2/authorize/";
        Response.Redirect(String.Format("{0}?{1}", authorityUri, queryString));       
    }

手順 4 – 認証コードを使用して Azure AD アクセス トークンを取得する

Power BI REST サービスへのデータ要求を作成するには、アクセス トークンを指定する必要があります。 .NET Web アプリで、Azure AD Authentication Library for .NET Nuget パッケージを使用してアクセス トークンを取得します。 Windows Azure Authentication Library (ADAL) を設定していない場合は、「Azure Active Directory 認証ライブラリを追加する方法」をご覧ください。

アプリを Azure AD オーソリティ URI にリダイレクトし、認証コードを取得すると、アプリは認証コードによってトークンを取得します。 次に、アプリが認証コードを取得してアクセス トークンを取得する方法を示します。リダイレクト クラスで次の操作を実行します:

  1. Azure AD から返される Azure AD の認証コードを取得します。

    string code = Request.Params.GetValues(0)[0];
    
  2. オーソリティ URI と TokenCache を渡す AuthenticationContext を作成します。

    TokenCache TC = new TokenCache();
    
    AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
    
  3. Azure アプリの クライアント ID と Azure アプリの クライアント シークレット を渡す ClientCredentialを作成します。

    ClientCredential cc = new ClientCredential(Properties.Settings.Default.ClientID, Properties.Settings.Default.ClientSecretKey);
    
  4. Azure AD によって返される 認証コードリダイレクト URLを渡す認証コードによってトークンを取得します。

    AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);
    
  5. default.aspx にリダイレクトします。

    Response.Redirect("/Default.aspx");
    
  6. default.aspx ページの結果を使用できるように、セッション "authResult" のインデックス文字列を AuthenticationResult に設定します。

    Session["authResult"] = AR;
    

Default.aspx ページで次の操作を実行します。

  1. セッションから AuthenticationResult を取得します。 手順 4 で、 AuthenticationResult を使用して、認証 AccessTokenを取得します。

    AuthenticationResult authResult = (AuthenticationResult)Session["authResult"];
    

次に、認証コードによって Azure アクセス トークンを取得し、default.aspx にリダイレクトする完全なコードを示します。

リダイレクト URI は、認証コードを要求するときに使用する redirect_uri と一致する必要があります。

public partial class Redirect : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
      //Redirect uri must match the redirect_uri used when requesting Authorization code.
      string redirectUri = "http://localhost:13526/Redirect";
      string authorityUri = "https://login.windows.net/common/oauth2/authorize/";

      // Get the auth code
      string code = Request.Params.GetValues(0)[0];

      // Get auth token from auth code       
      TokenCache TC = new TokenCache();

      AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
      ClientCredential cc = new ClientCredential
          (Properties.Settings.Default.ClientID,
          Properties.Settings.Default.ClientSecret);

      AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);

      //Set Session "authResult" index string to the AuthenticationResult
      Session["authResult"] = AR;

      //Redirect back to Default.aspx
      Response.Redirect("/Default.aspx");
  }
}

public partial class _Default : Page
{
  public AuthenticationResult authResult { get; set; }
  string baseUri = "https://api.powerbi.com/beta/myorg/";

  protected void Page_Load(object sender, EventArgs e)
  {

      //Test for AuthenticationResult
      if (Session["authResult"] != null)
      {
          //Get the authentication result from the session
          authResult = (AuthenticationResult)Session["authResult"];

          //Show Power BI Panel
          signInStatus.Visible = true;

          //Set user and token from authentication result
          userLabel.Text = authResult.UserInfo.DisplayableId;
          accessTokenTextbox.Text = authResult.AccessToken;
      }
  }

  ...
}

手順 5 - Azure AD アクセス トークンを使用して Power BI 操作を呼び出す

Power BI REST API の呼び出しは、Azure Active Directory から取得したアクセス トークンを "Authorization" ヘッダーに渡すことによって、認証されたユーザーに代わって行われます。 Active Directory (AAD) からアクセス トークンを取得したら、トークンを使用して Power BI REST API に Web 要求を行います。

認証コード ( AcquireTokenByAuthorizationCode ) によってトークンを取得してAuthenticationResultを設定したら、 AuthenticationResultAccessTokenプロパティを取得して Azure アクセス トークンを取得します。 次に、Power BI データセットを取得するコードを示します。 このコード サンプルは、 WebRequest を作成し、データセットへの応答文字列を逆シリアル化します。 Power BI REST API にアクセスするには、“Authorization” を "Bearer {AccessToken}" に設定する要求ヘッダーを作成します。

request.Headers.Add("Authorization", String.Format("Bearer {0}", authResult.AccessToken));

C# のサンプル – Power BI データセットの取得

    protected void getDatasetsButton_Click(object sender, EventArgs e)
    {
        string responseContent = string.Empty;

        //The resource Uri to the Power BI REST API resource
        string datasetsUri = "https://api.powerbi.com/v1.0/myorg/datasets";

        //Configure datasets request
        System.Net.WebRequest request = System.Net.WebRequest.Create(datasetsUri) as System.Net.HttpWebRequest;
        request.Method = "GET";
        request.ContentLength = 0;
        request.Headers.Add("Authorization", String.Format("Bearer {0}", authResult.AccessToken));

        //Get datasets response from request.GetResponse()
        using (var response = request.GetResponse() as System.Net.HttpWebResponse)
        {
            //Get reader from response stream
            using (var reader = new System.IO.StreamReader(response.GetResponseStream()))
            {
                responseContent = reader.ReadToEnd();

                //Deserialize JSON string
                //JavaScriptSerializer class is in System.Web.Script.Serialization
                JavaScriptSerializer json = new JavaScriptSerializer();
                Datasets datasets = (Datasets)json.Deserialize(responseContent, typeof(Datasets));

                resultsTextbox.Text = string.Empty;
                //Get each Dataset from
                foreach (dataset ds in datasets.value)
                {
                    resultsTextbox.Text += String.Format("{0}\t{1}\n", ds.Id, ds.Name);
                }
            }
        }
    }

public class Datasets
{
    public dataset[] value { get; set; }
}

public class dataset
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Azure Active Directory 認証ライブラリを追加する方法

.NET クライアント アプリケーションで、Active Directory 認証ライブラリの AuthenticationContext を使用して Azure アクセス トークンを取得します。 Active Directory Authentication Library NuGet パッケージを Visual Studio からインストールできます。 NuGet パッケージをインストールするときに、Visual Studio は必要なアセンブリへの参照を作成します。

  1. ソリューションを右クリックします。
  2. [NuGet パッケージの管理] を選択します。
  3. [Active Directory 認証ライブラリ] を検索します。
  4. パッケージの一覧で [Active Directory 認証ライブラリ] を選択し、[インストール] をクリックします。

参照

Azure AD Authentication Library for .NET NuGet パッケージ
Active Directory Authentication Library (ADAL) v1 for .NET
Azure AD の OAuth 2.0
認証コード付与フロー
Azure AD の認証シナリオ
他にわからないことがある場合は、 Power BI コミュニティを利用してください