Получить код авторизации для емкости Azure PowerBI для PowerBI Embedded - PullRequest
0 голосов
/ 13 ноября 2018

Я программно запускаю / останавливаю емкость Azure PowerBI для PowerBI Embedded.

При нажатии кнопки возобновите / приостановите службу встраивания powerbi в Azure. Я перешел по ссылке ниже, чтобы сделать это.

https://docs.microsoft.com/en-us/rest/api/power-bi-embedded/capacities/resume

Как динамически получать код авторизации каждый раз, когда я нажимаю кнопку.

1 Ответ

0 голосов
/ 13 ноября 2018

Токен доступа для Power BI можно получить с помощью Библиотеки проверки подлинности Active Directory Azure . Самый простой способ получить его - установить пакет NuGet для Microsoft.IdentityModel.Clients.ActiveDirectory. Затем для получения токена доступа необходимо вызвать метод AcquireTokenAsync . Вот как вы можете сделать это:

    private static string redirectUri = "https://login.live.com/oauth20_desktop.srf";
    private static string resourceUri = "https://analysis.windows.net/powerbi/api";
    private static string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    // Obtain at https://dev.powerbi.com/apps
    private static string clientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

    private static AuthenticationContext authContext = new AuthenticationContext(authorityUri, new TokenCache());

    private async void btnAuthenticate_ClickAsync(object sender, EventArgs e)
    {
        var authenticationResult = await authContext.AcquireTokenAsync(resourceUri, clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.Auto));
        if (authenticationResult == null)
            MessageBox.Show("Call failed.");
        else
            MessageBox.Show(authenticationResult.AccessToken);
    }

Последний параметр - PromptBehavior.Auto. Это означает, что вам будет предложено ввести учетные данные, если только ваша личность не сохранена на этом компьютере. Кроме того, когда нет согласия на доступ к этому приложению, пользователю также будет предложено. Аутентификация выполняется в интерактивном режиме - ожидается, что найдется человек, который введет учетные данные в случае необходимости. Если вы хотите получить токен доступа неинтерактивным способом, вы можете использовать имя пользователя и пароль в своем коде. В этом случае способ получения токена доступа должен выглядеть следующим образом:

    private void btnAuthenticate_Click(object sender, EventArgs e)
    {
        AuthenticationResult authenticationResult = null;

        // First check is there token in the cache
        try
        {
            authenticationResult = authContext.AcquireTokenSilentAsync(resourceUri, clientId).Result;
        }
        catch (AggregateException ex)
        {
            AdalException ex2 = ex.InnerException as AdalException;
            if ((ex2 == null) || (ex2 != null && ex2.ErrorCode != "failed_to_acquire_token_silently"))
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }

        if (authenticationResult == null)
        {
            var uc = new UserPasswordCredential("user@example.com", "<EnterStrongPasswordHere>"); // Or parameterless if you want to use Windows integrated auth
            try
            {
                authenticationResult = authContext.AcquireTokenAsync(resourceUri, clientId, uc).Result;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.InnerException == null ? "" : Environment.NewLine + ex.InnerException.Message);
                return;
            }
        }

        if (authenticationResult == null)
            MessageBox.Show("Call failed.");
        else
            MessageBox.Show(authenticationResult.AccessToken);
    }

Обратите внимание, что этот вызов может не состояться, если ваше приложение не дает согласия. Для этого перейдите на портал Azure -> Azure Active Directory -> Регистрация приложений и найдите свое приложение. Затем откройте настройки приложения и в разделе «Необходимые разрешения» выберите Power BI Service и нажмите «Предоставить разрешения»: enter image description here

На данный момент вы можете использовать этот токен доступа для выполнения вызовов REST API или для встраивания элементов в ваше приложение. Этот токен предоставляет доступ ко всему, к чему пользователь имеет доступ, и к нему был разрешен доступ, когда вы зарегистрировали свое приложение на портале. Однако если вы хотите сгенерировать токен для одного конкретного отчета (или фрагмента, или панели инструментов), вы можете вызвать некоторые из методов Embed Token , например, GenerateTokenInGroup (с помощью токена доступа ADAL для аутентификации в заголовках запроса на генерацию встроенного токена).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...