Как сгенерировать токен доступа для Azure с паролем типа предоставления? REST API PowerBI
Я хочу иметь возможность автоматически получать токены доступа без необходимости взаимодействия с пользователем (то есть вручную вводить учетные данные во всплывающем окне OAuth). Для этого я используюgrant_type:пароль; однако я получаю сообщение об ошибкеvalid_grant, в котором говорится, что учетные данные неверны, но учетные данные верны, поскольку я могу использовать их для входа на платформу Azure.
Для этого я использовал Postman с областями клиента, client_id и базовыми, показанными на платформе Azure.POST: https://login.microsoftonline.com/{{tenant}}/oauth2/v2.0/token Тип контента: application/x-www-form-urlencoded Тело:
client_id={{client_id}}
&client_secret={{client_secret}}
&scope=User.Read
&grant_type=password
&username={{user@name.com}}
&password={{password}}
Есть ли у вас какие-либо идеи относительно того, что может быть причиной этой ошибки?
1 ответ
Ошибка обычно возникает, если вы используете учетные данные внешнего пользователя в потоке ROPC для создания токена доступа.
Как упоминалось в этой документации MS ,
Платформа идентификации Microsoft поддерживает грант ROPC только в клиентах Azure AD, но не в личных учетных записях. Личные учетные записи, приглашенные в клиент Azure AD, не могут использовать поток ROPC.
Я зарегистрировал одно приложение Azure AD и добавил разрешение API, как показано ниже:
Когда я попытался сгенерировать токен доступа с использованием потока ROPC, включая учетные данные внешнего пользователя , я получил ту же ошибку, что и ниже:
POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
client_id: <appID>
client_secret:<secret>
scope:User.Read
grant_type:password
username:demouser_gmail.com#EXT#@xxxxxxxxxx.onmicrosoft.com
password:xxxxxxxxx
Ответ:
Для устранения ошибки необходимо изменитьusername
иpassword
с учетными данными локального пользователя Azure AD, как показано ниже:
POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
client_id: <appID>
client_secret:<secret>
scope:User.Read
grant_type:password
username:sri@xxxxxxxx.onmicrosoft.com
password:xxxxxxxxx
Ответ:
Но приведенный выше токен не будет работать для вызова Power Bi какUser.Read
— это разрешение Microsoft Graph. Вам необходимо добавить разрешения Power Bi в свое приложение для вызова Power Bi REST API, как показано ниже:
При создании токена доступа обязательно измените область действия на https://anaанализ.windows.net/powerbi/api/.default следующим образом:
POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
client_id: <appID>
client_secret:<secret>
scope: https://analysis.windows.net/powerbi/api/.default
grant_type:password
username:sri@xxxxxxxx.onmicrosoft.com
password:xxxxxxxxx
Ответ:
Вы можете проверить это, раскодировав токен в jwt.ms , который имеет
aud
и
scp
претензии, как показано ниже: