ユーザーを認証し、Power BI アプリ用の Azure AD アクセス トークンを取得するAuthenticate users and get an Azure AD access token for your Power BI app

Power BI アプリケーション内でユーザーを認証し、REST API で使うアクセス トークンを取得する方法について説明します。Learn how you can authenticate users within your Power BI application and retrieve an access token to use with the REST API.

Power BI REST API を呼び出す前に、Azure Active Directory (Azure AD) の認証アクセス トークン (アクセス トークン) を取得する必要があります。Before you can call the Power BI REST API, you need to get an Azure Active Directory (Azure AD) authentication access token (access token). アクセス トークンは、アプリが Power BI のダッシュボード、タイル、レポートにアクセスするのを許可するために使われます。An access token is used to allow your app access to Power BI dashboards, tiles and reports. Azure Active Directory のアクセス トークン フローの詳細については、「Azure AD 認証コード付与フロー」を参照してください。To learn more about Azure Active Directory access token flow, see Azure AD Authorization Code Grant Flow.

コンテンツの埋め込み方法により、アクセス トークンの取得方法が異なります。Depending on how you are embedding content, the access token will be retrieved differently. この記事では、2 つの異なるアプローチを使います。Two different approaches are used within this article.

Power BI ユーザーのアクセス トークン (ユーザーがデータを所有している場合)Access token for Power BI users (user owns data)

この例は、ユーザーが自分の組織ログインを使って Azure AD に手動でログインする場合です。This example is for when your users will manually log into Azure AD with their organziation login. この方法は、アクセス権があるコンテンツにアクセスする Power BI ユーザー向けのコンテンツを Power BI サービス内に埋め込む場合に使われます。This is used when embedding content for Power BI users that will access content they have access to within the Power BI service.

Azure AD から認証コードを取得するGet an authorization code from Azure AD

アクセス トークンを取得する最初の手順は、Azure AD から認証コードを取得することです。The first step to get an access token is to get an authorization code from Azure AD. この手順を行うには、次のプロパティを持つクエリ文字列を作成して、Azure AD にリダイレクトします。To do this, you construct a query string with the following properties, and redirect to Azure AD.

認証コードのクエリ文字列Authorization code 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
    // https://analysis.windows.net/powerbi/api
    {"resource", Properties.Settings.Default.PowerBiAPI},

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

クエリ文字列を構築した後、Azure AD にリダイレクトして認証コードを取得します。After you construct a query string, you redirect to Azure AD to get an authorization code. 認証コード クエリ文字列を構築し、Azure AD にリダイレクトするための完全な C# メソッドを以下に示します。Below is a complete C# method to construct an authorization code query string, and redirect to Azure AD. 認証コードを取得した後、認証コードを使ってアクセス トークンを取得します。After you have the authorization code, you get an access token using the authorization code.

redirect.aspx.cs 内で、AuthenticationContext.AcquireTokenByAuthorizationCode が呼び出されてトークンが生成されます。Within redirect.aspx.cs, AuthenticationContext.AcquireTokenByAuthorizationCode will then be called to generate the token.

認証コードの取得Get authorization code

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
        // https://analysis.windows.net/powerbi/api
        {"resource", Properties.Settings.Default.PowerBiAPI},

        //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
    // AADAuthorityUri = https://login.windows.net/common/oauth2/authorize/
    string authorityUri = Properties.Settings.Default.AADAuthorityUri;
    var authUri = String.Format("{0}?{1}", authorityUri, queryString);
    Response.Redirect(authUri);
}

認証コードからアクセス トークンを取得するGet an access token from authorization code

Azure AD から認証コードを取得しました。You should now have an authorization code from Azure AD. Azure AD によって認証コードとともに web アプリにリダイレクトされた後、認証コードを使用してアクセス トークンを取得します。Once Azure AD redirects back to your web app with an authorization code, you use the authorization code to get an access token. 次に示す C# のサンプルは、リダイレクト ページ、および default.aspx ページ用の Page_Load イベントで使うことができます。Below is a C# sample that you could use in your redirect page and the Page_Load event for your default.aspx page.

Microsoft.IdentityModel.Clients.ActiveDirectory 名前空間は、Active Directory Authentication Library NuGet パッケージから取得できます。The Microsoft.IdentityModel.Clients.ActiveDirectory namespace can be retrieved from the Active Directory Authentication Library NuGet package.

Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory

Redirect.aspx.csRedirect.aspx.cs

using Microsoft.IdentityModel.Clients.ActiveDirectory;

protected void Page_Load(object sender, EventArgs e)
{
    //Redirect uri must match the redirect_uri used when requesting Authorization code.
    string redirectUri = String.Format("{0}Redirect", Properties.Settings.Default.RedirectUrl);
    string authorityUri = Properties.Settings.Default.AADAuthorityUri;

    // 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[_Default.authResultString] = AR;

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

Default.aspxDefault.aspx

using Microsoft.IdentityModel.Clients.ActiveDirectory;

protected void Page_Load(object sender, EventArgs e)
{

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

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

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

Power BI ユーザーではないユーザーのアクセス トークン (アプリがデータを所有している場合)Access token for non-Power BI users (app owns data)

このアプローチは通常、アプリがデータへのアクセスを所有している ISV タイプのアプリケーションに対して使われます。This approach is typically used for ISV type applications where the app owns access to the data. ユーザーは必ずしも Power BI ユーザーではなく、アプリケーションがエンドユーザーの認証とアクセスを制御します。Users will not necessarily be Power BI users and the application controls authentication and access for the end users.

このアプローチでは、Power BI Pro ユーザーである 1 つの "マスター" アカウントを使います。For this approach, you will use a single master account that is a Power BI Pro user. このアカウントの資格情報は、アプリケーションで保存されます。The credentials for this account are stored with the application. アプリケーションは、これらの保存された資格情報を使って Azure AD に対する認証を行います。The application will authenticate against Azure AD with those stored credentials. 次に示すコード例は、アプリ所有データ サンプルのものですThe example code shown below comes from the App owns data sample

HomeController.csHomeController.cs

using Microsoft.IdentityModel.Clients.ActiveDirectory;

// Create a user password cradentials.
var credential = new UserPasswordCredential(Username, Password);

// Authenticate using created credentials
var authenticationContext = new AuthenticationContext(AuthorityUrl);
var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential);

if (authenticationResult == null)
{
    return View(new EmbedConfig()
    {
        ErrorMessage = "Authentication Failed."
    });
}

var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer");

await の使い方については、「await (C# リファレンス)」をご覧くださいFor information on how to use await, see await (C# Reference)

次の手順Next steps

アクセス トークンを入手したので、Power BI REST API を呼び出してコンテンツを埋め込むことができます。Now that you have the access token, you can call the Power BI REST API to embed content. コンテンツの埋め込み方法について詳しくは、「Power BI ダッシュボード、レポート、およびタイルを埋め込む方法」をご覧ください。For information on how to embed your content, see How to embed your Power BI dashboards, reports and tiles.

他にわからないことがある場合は、More questions? Power BI コミュニティで質問してみてくださいTry asking the Power BI Community