Проверка подлинности для пользователей и получение маркера доступа Azure AD для приложения Power BIAuthenticate 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.

Перед вызовом REST API Power BI нужно получить маркер доступа для проверки подлинности (маркер доступа) 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. В этой статье используются два разных подхода.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 ADGet 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. Ниже приведен полный метод C# для создания строки запроса кода авторизации и перенаправления в Azure AD.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 выполняет перенаправление обратно в веб-приложение с использованием кода авторизации, можно воспользоваться кодом авторизации для получения токена доступа.Once Azure AD redirects back to your web app with an authorization code, you use the authorization code to get an access token. Ниже приведен пример C#, который вы можете использовать на странице перенаправления и в событии Page_Load для страницы default.aspx.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 можно извлечь из пакета NuGet библиотеки аутентификации Active Directory.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)

Этот подход обычно используется для приложений независимых поставщиков, когда права на доступ к данным принадлежат такому приложению.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.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

Теперь, когда у вас есть маркер доступа, можно вызвать REST API Power BI, чтобы внедрить содержимое.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