.NET クライアント アプリ サンプルのダウンロード | GitHub でコードを確認する

この記事では、Power BI クライアント アプリを認証する方法について説明します。 C# のサンプルが含まれていますが、認証プロセスは他のプログラミング言語と同じです。

Power BI クライアント アプリの認証方法を示す完全な C# のサンプルについては、クライアント アプリのサンプルに関する記事をご覧ください。

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

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

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

Power BI クライアント アプリの認証に必要なもの

Power BI クライアント アプリを認証し、REST Web 要求を実行するには、次を実行する必要があります。

  1. クライアント アプリを登録する - Power BI クライアント アプリを登録するには、「クライアント アプリを登録する」をご覧ください。 Azure Active Directory にクライアント アプリを登録するときに、Power BI API にアプリのアクセス権を付与します。
  2. アプリにクライアント ID を割り当てる - アプリのクライアント ID を取得するには、「クライアント アプリ ID を取得する方法」をご覧ください。 クライアント ID は、アプリケーションによって使用され、アクセス許可を要求しているユーザーを識別します。
    • クライアント アプリ コードで、 clientID 変数を Azure アプリケーションのクライアント ID に割り当てます。
  3. リダイレクト URI を割り当てる - クライアント アプリでは、リダイレクト URI が、認証する特定のアプリケーションに関する詳細を AAD に提供します。 Uniform Resource Identifier (URI) は、リソースの名前を識別する値です。

    • クライアント アプリ コードで、 redirectUri を "https://login.live.com/oauth20_desktop.srf" に割り当てます。 クライアント アプリにはリダイレクト先となる外部サービスがないため、この URI はクライアント アプリの標準的なプレース ホルダーになります。
  4. リソース URI を Power BI API に割り当てる - リソース URI は、Power BI API リソースを識別します。

    • クライアント アプリ コードで、 resourceUri を "https://analysis.windows.net/powerbi/api" に割り当てます。
  5. OAuth2 オーソリティ URI を割り当てる - オーソリティ URI は、OAuth2 オーソリティのリソースを識別します。

    • クライアント アプリ コードで、オーソリティ URI を "https://login.windows.net/common/oauth2/authorize" に割り当てます。
  6. データセット URI を Power BI API データセットに割り当てる - データセット URI は、Power BI API データセット リソースを識別します。

    • クライアント アプリ コードで、 datasetsUri を "https://api.powerbi.com/v1.0/myorg/datasets" に割り当てます。

Power BI REST サービスへのデータ要求を作成するには、アクセス トークンを指定する必要があります。 .NET クライアント アプリで、Azure AD Authentication Library for .NET Nuget パッケージを使用してアクセス トークンを取得します。 ここには、プロセスがあります。 以下に、AccessToken() メソッドの例を示します。

Windows Azure Authentication Library (ADAL) を設定していない場合は、「Azure Active Directory 認証ライブラリを追加する方法」をご覧ください。

クライアント アプリを認証するには、Windows Azure Authentication Library (ADAL) に含まれている Microsoft.IdentityModel.Clients.ActiveDirectory に参照を追加する必要があります。

アクセス トークンを取得する手順

  1. AuthenticationContext のインスタンスを作成する - AuthenticationContext は、Azure AD リソースの権限を発行するトークンを表すメイン クラスです。 コンストラクターは次を取得します。

    • OAuth2 オーソリティ URI
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. AuthenticationContext.AcquireToken() を呼び出してトークンを取得する - メソッドは次を取得します。

    • Power BI API のリソース URI
    • Power BI アプリのクライアント ID
    • Power BI アプリのリダイレクト URI
    string token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession).AccessToken;
    

AuthenticationContext がトークンを取得する操作について詳しくは、「Azure 認証コンテキスト フロー」をご覧ください。

C# のサンプル - アクセス トークンの取得

.NET クライアント アプリで、 AuthenticationContext を使用してアクセス トークンを取得します。

      static string AccessToken()
      {
            //Get access token:
            // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
            // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
            // To install the Active Directory Authentication Library NuGet package in Visual Studio,
            //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

            //Resource Uri for Power BI API
            string resourceUri = "https://analysis.windows.net/powerbi/api";

            string clientId = {clientIDFromAzureAppRegistration};

            //A redirect uri gives AAD more details about the specific application that it will authenticate.
            //Since a client app does not have an external service to redirect to, this Uri is the standard placeholder for a client app.
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            // Create an instance of AuthenticationContext to acquire an Azure access token
            // OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);

            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            //  AcquireToken takes a Client Id that Azure AD creates when you register your client app.
            //  To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/library/dn877542(Azure.100).aspx   
            string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;

            return token;
      }

トークンを使用して Power BI REST API へのデータ要求を作成する

Active Directory (AAD) からアクセス トークンを取得したら、トークンを使用して Power BI REST API に Web 要求を行います。 Power BI REST Web 要求を作成するには、次のようにアクセス トークンを要求ヘッダーに追加します。

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

C# のサンプル - トークンを使用した Power BI REST API データ要求

Power BI クライアント アプリを認証してすべての Power BI REST 操作を呼び出す方法を示す完全な C# サンプルについては、クライアント アプリのサンプルに関する記事をご覧になるか、GitHub でコードをご確認ください。

        static dataset[] GetDatasets()
        {
            //This is sample code to illustrate a Power BI operation.
            //In a production application, refactor code into specific methods and use appropriate exception handling.

            //Power BI Datasets Url
            string powerBIApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";

            //Get Azure AD access token (see above)
            string token = AccessToken();

            //GET web request to list all datasets.
            //To get a datasets in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            //Add access token to Request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
                    Datasets datasets = (Datasets)jsonSerializer.Deserialize(responseContent, typeof(Datasets));

                    return datasets.value;
                }
            }
        }

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

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

Azure 認証コンテキスト フロー

.NET クライアント アプリで、 AuthenticationContext を使用して Azure アクセス トークンを取得します。 AuthenticationContext は、Azure AD リソースの権限を発行するトークンを表すメイン クラスです。 AuthenticationContext は、次を実行します。

  1. AuthenticationContext は、Azure Active Directory の認証エンドポイントにユーザー エージェントをリダイレクトすることでフローを開始します。 ユーザーは認証し、同意が要求された場合は同意します。

  2. Azure Active Directory の認証エンドポイントは、認証コードを使用して AuthenticationContext にユーザー エージェントをリダイレクトします。 ユーザー エージェントは、クライアント アプリケーションのリダイレクト URI に認証コードを返します。

  3. AuthenticationContext は、Azure Active Directory のトークン発行エンドポイントからアクセス トークンを要求します。 これは、ユーザーが同意したことを証明する認証コードを表します。

  4. Azure Active Directory のトークン発行エンドポイントは、アクセス トークンを返します。

  5. クライアント アプリケーションは、アクセス トークンを使用して Web API を認証します。

  6. クライアント アプリケーションを認証した後、Power BI REST API は要求されたデータを返します。

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

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 コミュニティを利用してください