Short Scenrario : веб-приложение с интерфейсом muti-tenant javascript (React.JS) вызывает многопользовательский ASP.NET Core 2.2 WebAPI из браузера.
Аутентификация:
ADAL.js в приложении переднего плана заботится о получении токена из AzureAD1, AzureAD2 или AzureAD3 ... при входе пользователя в систему (на основе исходного Azure Active Directory пользователя).
Пользователь дает согласие на интерфейсное веб-приложение ( область действия: войдите и прочитайте профиль пользователя ), которое также делегировано для WebAPI. ( означает, что пользователю также не требуется согласие с WebAPI )
Внешнее веб-приложение вызывает WebAPI с токеном-носителем для получения ресурсов.
Проблема: я должен автоматизировать развертывание новой среды. И соответственно установите файл манифеста (это решение SaaS)
- В файле манифеста мне нужно предоставить WebAPI для клиентского приложения (https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-expose-web-apis#expose-a-new-scope-through-the-ui)
- Недостаточно установить «knownClientApplications» ( из-за ранее описанного делегирования )
- Новая конечная точка v2 (https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-overview) имеет новую функцию регистрации приложений. Старая теперь называется "Legacy" и устареет с мая 2019 года.
- В портале Azure необходимо предоставить API и добавить интерфейсный веб-приложение в качестве «Авторизованных приложений».
Этот шаг добавит новый объект в файл манифеста:
"preAuthorizedApplications": [
{
"appId": "guid",
"permissionIds": [
"guid"
]
}
],
- Но он все еще недоступен через PowerShell! (https://docs.microsoft.com/en-us/powershell/module/azuread/set-azureadapplication?view=azureadps-2.0)
Как добавить этот раздел «preAuthorizedApplications» в файл манифеста с помощью Azure PowerShell? Почему он доступен на портале, но еще не в PS? Обычно все наоборот ...
08-05-2019 Обновление на основе ответа:
Я получаю токен доступа через Принципала обслуживания:
$adTokenUrl = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$resource = "https://graph.windows.net/"
$body = @{
grant_type = "client_credentials"
client_id = "$ServicePrincipalId"
client_secret = "$ServicePrincipalKey"
resource = "$resource"
}
$response = Invoke-RestMethod -Method 'Post' -Uri $adTokenUrl -ContentType "application/x-www-form-urlencoded" -Body $body
$token = $response.access_token
Согласно документам: https://docs.microsoft.com/en-us/graph/api/application-update?view=graph-rest-beta&tabs=cs
Принципал службы должен иметь как минимум Application.ReadWrite.OwnedBy и большинство привилегий Application.ReadWrite.All.
Должен ли я попросить нашего администратора AAD предоставить указанные ниже права Принципалу обслуживания?
08-05-2019 Обновление 2: Принципал службы получил ВСЕ вышеуказанные права.
Попытка 1:
Шаг 1: получение access_token через Принцип обслуживания (Владелец приложения Api будет обновлен)
$adTokenUrl = "https://login.microsoftonline.com/$(TenantId)/oauth2/token"
$resource = "https://graph.microsoft.com/"
$body = @{
grant_type = "client_credentials"
client_id = "$(ServicePrincipalId)"
client_secret = "$(ServicePrincipalKey)"
resource = "$resource"
}
$response = Invoke-RestMethod -Method 'Post' -Uri $adTokenUrl -ContentType "application/x-www-form-urlencoded" -Body $body
$token = $response.access_token
Шаг 2: использование этого access_token, создание моего запроса PATCH согласно предложению Md Farid Uddin Kiron и
Результат: удаленный сервер возвратил ошибку: (403) Запрещено.
09-05-2019 Обновление 3: После каких-то подробных и подробных объяснений и рекомендаций я получил это для работы и получил HTTP 204 для моего запроса Почтальона. Осталось только интегрировать эти шаги в мой конвейер.
См. Принятый ответ . Оно работает. Если у кого-то есть такая же проблема,
пожалуйста, прочитайте другой ответ от Фарида Уддина Кирона.