#azure #token #powerbi
#azure #токен #powerbi
Вопрос:
После дня и нескольких часов поиска в PowerBI и чтения примеров веб-приложения PowerBI я столкнулся со стеной, каков наилучший способ изменить нижеприведенный код
var tokenCache = new TokenCache();
var authContext = new AuthenticationContext(authorityUri, tokenCache);
var token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri)).AccessToken;
чтобы незаметно получить токен доступа для power Bi rest API. Я знаю, что есть AcquireTokenSlientAsync, но когда я регистрирую свое приложение как WebApp, включая cliendID и clientSecret, это выдает ошибку 403.
В настоящее время мое веб-приложение регистрируется в dev powerbi как NativeApp и получает токен при каждом запросе. Но каждый раз появляется всплывающее окно.
Поскольку я использую токен доступа для встраивания различных отчетов на веб-страницу, было бы здорово, если бы кто-нибудь показал мне, как незаметно получить токен без использования имени пользователя и пароля.
Я пытался использовать var token = authContext.AcquireTokenSlientAsync(resourceUri, clientCredential);
Любая информация очень ценится.
Комментарии:
1. Выполняется ли первоначальная аутентификация приложения с использованием AAD? Являются ли отчеты, которые вы пытаетесь показать, специфичными для пользователя?
2. @JustLogic Первоначальная проверка подлинности приложения использует утверждения о получении проверки подлинности Microsoft graph, а затем да, отчеты, которые я пытаюсь использовать, зависят от пользователя
Ответ №1:
Основываясь на вашем комментарии, что вы можете сделать, это использовать токен «обновить», который вы получаете при первоначальной аутентификации. Этот начальный токен должен включать токен обновления, с помощью токена обновления вы можете использовать метод «AcquireTokenByRefreshToken» и передать новый ресурс (api power bi), для которого вам нужен токен доступа.
AuthenticationContext authContext = новый AuthenticationContext(полномочия, новый AdalTokenCache (утверждение.Значение)); var refresh_token = authContext .Кэш токенов.ReadItems().FirstOrDefault().refreshToken; Учетные данные клиента = новые учетные данные клиента (идентификатор клиента, ключ приложения); var соответственно = authContext.Приобретите токенбайрефрештокен (refresh_token, учетные данные, "https://analysis.windows.net/powerbi/api ");
Надеюсь, это поможет.
Комментарии:
1. спасибо за ваш ответ, только один вопрос, идентификатор клиента (AppKey) мы ссылаемся на PowerBI clientSecret после регистрации в качестве webapp? Спасибо
2. Также моя первоначальная аутентификация заключалась в использовании SessionTokenCache, поэтому я полагаю, что я получу токен из сеанса в webapi и получу его…
3. Да, идентификатор клиента и ключ приложения (секрет клиента) являются идентификаторами приложения, зарегистрированного в aad.
4. спасибо за ваши ответы, в конце концов я решил это с помощью refreshToken 🙂