Отправка запроса GET на ASP. NET Core Web Application API с использованием Azure AD Authentication возвращает 401 - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь пройти аутентификацию по стандартному ASP. NET API веб-приложения, используя Azure аутентификацию AD.

Я могу получить токен из приложения Azure с помощью clientId и секрет, но когда я пытаюсь создать запрос GET в PowerShell, я получаю 401. unauthorized.

Разве токен для приложения, созданного с помощью веб-приложения, не должен предоставлять доступ к API?

Это сценарий, используемый для получения результата.

$postParams = @{
    grant_type='client_credentials';
    client_id=$clientId;
    client_secret=$clientSecret;
    resource='https://graph.microsoft.com';
}

$token = Invoke-WebRequest -Uri "https://login.microsoftonline.com/$($tenantId)/oauth2/token" -Method 
Post -Body $postParams | select -expand content | convertfrom-json | select -expand access_token

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "bearer $token")

Invoke-WebRequest -Uri "https://localhost:32775/weatherforecast" -Method Get -Headers $headers -ContentType "application/json"

Что возвращает.

Invoke-WebRequest : The remote server returned an error: (401) Unauthorized.

1 Ответ

1 голос
/ 20 июня 2020

Пожалуйста, укажите, что находится в ваших postParams, я думаю, вам, вероятно, не хватает области или ресурса. https://blog.tekspace.io/access-azure-rest-api-using-powershell/

Обычно у вас будет 2 регистрации приложений, одна для веб-API и одна для клиента (в данном случае PowerShell). Технически вы можете использовать их оба в одном приложении, но обычно это не лучшая практика. https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/2-Call-OwnApi#register -the-service-app-todolist-webapi-daemon-v2 Вот как вы настраиваете регистрацию приложения для приложений, потому что вы используете секрет приложения, тогда он ищет ресурс и ваш разрешения api должны быть разрешениями приложения, а не делегированными разрешениями. поэтому вам нужно открыть api, а затем добавить утверждение в манифест. затем под разрешениями api клиента вы можете добавить разрешения api my api-> application-> Approlename et c. затем вы должны обработать его в коде вашего asp. net приложения

Ваш api также должен быть настроен для обработки роли. потому что с потоком учетных данных клиента это утверждение ролей, а не утверждение области. https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow#application -разрешения

...