Как получить доступ к Azure WebApp через Powershell, используя секрет клиента - PullRequest
1 голос
/ 03 февраля 2020

Я создал WebApp в Azure с включенной Azure аутентификацией. Это работает, как и ожидалось, при аутентификации с использованием пользователя. Но у WebApp есть одна указанная конечная точка c, которая исключает размещение данных JSON, чтобы их можно было проанализировать и представить в виде диаграммы. Я хотел бы опубликовать эти данные, которые были собраны многочисленными скриптами Powershell. Я могу сделать это, если я запускаю сценарии Powershell в контексте учетной записи пользователя, но я хотел бы пройти аутентификацию с использованием имени участника-службы (используя идентификатор приложения и секретный ключ, который был установлен). Это вообще возможно? Я пробовал приведенный ниже код, который на самом деле получает токен доступа, но при отправке его в заголовке почтового запроса я получаю

"У вас нет разрешения на просмотр этого каталога или страницу. "

сообщение об ошибке.

$RequestAccessTokenUri = "https://login.microsoftonline.com/tenantID/oauth2/token"

$ClientId = "Application Id"

$ClientSecret = "Client Secret"

$Resource = "URL of the WebApp"

$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'

$Headers = @{}

$Headers.Add("Authorization","$($Token.token_type) $($Token.access_token)")

$AppUri = $Resource + "/upload/post"
$json = <This will contain the actual JSON objects that will be posted>

invoke-RestMethod -Uri $AppUri -Method Post -Headers $Headers -body $json

Возможно ли вообще получить доступ от Powershell к Azure WebApp путем аутентификации с использованием SPN? Любая помощь будет высоко ценится.

1 Ответ

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

Возможно ли даже получить доступ от 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

Ссылка:

Проверка токенов от провайдеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...