Возможно ли даже получить доступ от Powershell к Azure WebApp путем аутентификации с использованием SPN?
Да, это возможно. Но нам нужно использовать токен сеанса (не токен доступа) для доступа к ресурсам приложения.
Пользователь токен доступа для получения Аутентификация токена .
Запрос:
POST https://<appname>.azurewebsites.net/.auth/login/aad HTTP/1.1
Content-Type: application/json
{"id_token":"<token>","access_token":"<token>"}
Ответ:
{
"authenticationToken": "...",
"user": {
"userId": "sid:..."
}
}
Получив токен сеанса, вы можете получить доступ к защищенным ресурсам приложения, добавив заголовок X-ZUMO-AUTH к своим HTTP-запросам
GET https://<appname>.azurewebsites.net/api/products/1
X-ZUMO-AUTH: <authenticationToken_value>
Вот рабочий скрипт powershell.
$RequestAccessTokenUri = "https://login.microsoftonline.com/{tenantId}/oauth2/token"
$ClientId = "{Application Id}"
$ClientSecret = "{client secret}"
$Resource = "{Application Id}"
$body = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret&resource=$Resource"
$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $body -ContentType 'application/x-www-form-urlencoded'
#get authentication token url
$RequestAuthenticationTokenUri="https://webapi-productsapp2093.azurewebsites.net/.auth/login/aad"
$bodystr = "{" + '"' + "access_token" + '"' + ":" + '"' + $Token.access_token + '"' + "}"
$authenticationToken=Invoke-RestMethod -Method Post -Uri $RequestAuthenticationTokenUri -Body $bodystr -ContentType 'application/json'
$Headers = @{}
$Headers.Add("X-ZUMO-AUTH",$authenticationToken.authenticationToken)
$website="http://webapi-productsapp2093.azurewebsites.net/api/products/1"
invoke-RestMethod -Uri $website -Method Get -Headers $Headers
Ссылка:
Проверка токенов от провайдеров