Несколько значений подсказок для конечной точки Microsoft Identity - PullRequest
0 голосов
/ 31 января 2020

Есть ли способ включить приглашения на вход и согласие через платформу Microsoft Identity?

В документах явно не упоминается поддержка нескольких значений подсказок: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

Я попытался выполнить этот сценарий PowerShell с разделенными пробелами значениями для входа и согласия. Пробел закодирован как «% 20», например, prompt = login% 20consent.

$clientId = "MyClientId

Start-Process "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=$clientId&scope=openid%20profile%20https://ads.microsoft.com/ads.manage%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient&state=ClientStateGoesHere&prompt=login%20consent"

$code = Read-Host "Grant consent in the browser, and then enter the code here (see ?code=UseThisCode&...)"
Write-Output "code: " $code  
$response = Invoke-WebRequest https://login.microsoftonline.com/common/oauth2/v2.0/token -ContentType application/x-www-form-urlencoded -Method POST -Body "client_id=$clientId&scope=https://ads.microsoft.com/ads.manage%20offline_access&code=$code&grant_type=authorization_code&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient"

$oauthTokens = ($response.Content | ConvertFrom-Json)  
Write-Output "Access token: " $oauthTokens.access_token  
Write-Output "Access token expires in: " $oauthTokens.expires_in  
Write-Output "Refresh token: " $oauthTokens.refresh_token 

Это приводит к неподдерживаемой ошибке приглашения:

Request Id: 9e072f53-23f2-4317-9dda-240e18c15c00
Correlation Id: f7a29334-c4e3-40d4-9810-c22f6a78c4d9
Timestamp: 2020-01-31T15:57:50Z
Message: AADSTS90023: Unsupported 'prompt' value.

Через конечную точку, которую я могу включить пробел с разделением пробелом логин и согласие. Пробел кодируется как «% 20», например, prompt = login% 20consent. Этот сценарий PowerShell запрашивает логин и согласие, как и ожидалось.

$clientId = "MyClientId"

Start-Process "https://login.live.com/oauth20_authorize.srf?client_id=$clientId&scope=bingads.manage&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf&prompt=login%20consent"

$code = Read-Host "Grant consent in the browser, and then enter the code here (see ?code=UseThisCode&...)"

$response = Invoke-WebRequest https://login.live.com/oauth20_token.srf -ContentType application/x-www-form-urlencoded -Method POST -Body "client_id=$clientId&scope=bingads.manage&code=$code&grant_type=authorization_code&redirect_uri=https%3A%2F%2Flogin.live.com%2Foauth20_desktop.srf"

$oauthTokens = ($response.Content | ConvertFrom-Json)  
Write-Output "Access token: " $oauthTokens.access_token  
Write-Output "Access token expires in: " $oauthTokens.expires_in  
Write-Output "Refresh token: " $oauthTokens.refresh_token 

1 Ответ

0 голосов
/ 04 февраля 2020

Как показывает ошибка, не поддерживается в настоящее время для установки приглашений на вход и согласия.

В соответствии с принципами проектирования, когда ваши ресурсы интегрированы с Azure Active Directory, разрешения для доступ к ним запрашивается с использованием Azure структуры согласия AD.

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

Таким образом, нет необходимости добавлять запрос о согласии в запрос для запуска диалога согласия OAuth каждый раз, когда пользователь входит в систему.

Принудительное использование имени пользователя и пароля может иметь смысл, но принудительное согласие после каждого логина нет.

...