Как сгенерировать токен доступа для 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претензии, как показано ниже:

Другие вопросы по тегам