Как вызвать API для аутентификации Azure с помощью Powershell?Точнее говоря, я хочу, чтобы эта строка работала: Invoke-RestMethod -Method Get -Uri 'https://contoso.com/api/Hello
Мой API локальный (но видимый в Интернете) и имеет настроенную и обязательную проверку подлинности Azure AD.
Я хочу проходить аутентификацию через Powershell программно, чтобы я мог вызывать API без необходимости какого-либо дополнительного взаимодействия.
В настоящее время я получаю 401 ошибок при выполнении Invoke-RestMethod
независимо от того, чтоЯ делаю.
Об API
Я использую пример приложения cp asp.net core c #, созданного в Visual Studio (с использованием метода проверки подлинности на рабочем месте или в школе).Этот процесс создал в Azure регистрацию приложения, и я вручную создал секрет клиента в Azure.
То, что я пытался
Теперь, используя Powershell, я заполнил следующее
$Params = @{
'client_id' = ''
'Redirect_URI' = ''
'TenantID' = ''
'response_type'='code'
}
$ClientSecret = ''
Оттуда я получил код авторизации, используя:
$Query = "?"; $Params.Keys | % {$Query+= "$($_)=$($Params.Item($_))&"} ; $Query = $Query.TrimEnd('&')
$IE= new-object -ComObject "InternetExplorer.Application"
$IE.Visible = $true
$IE.navigate2("https://login.microsoftonline.com/$($params.TenantID)/oauth2/authorize$Query")
Write-Host 'Press enter when Code is displayed in URL'
pause
$Code = [System.Web.HttpUtility]::ParseQueryString(([uri]$ie.LocationURL).Query)['code']
$ie.quit()
Наконец, я получаю токен доступа, используя следующее:
$TokenResult = Invoke-RestMethod -Method Post -ContentType 'application/x-www-form-urlencoded' -Uri "https://login.microsoftonline.com/$($Params.TenantID)/oauth2/v2.0/token" -Body @{
client_id = $Params.client_id
scope = 'User.Read offline_access'
code = $Code
redirect_uri = $Params.Redirect_URI
grant_type = 'authorization_code'
client_secret = $ClientSecret
}
Однако, если я сейчас попытаюсь вызвать API, используя:
Invoke-RestMethod 'https://SomeDomain.com/api/values' -Headers @{Authorization = "Bearer $($TokenResult.access_token)"}
Результат
Я получаю несанкционированный 401
Мои наблюдения
Я верю, что яуспешно использовал описанный ниже метод для взаимодействия с Graph API и другими API Azure.Однако это не работает при вызове моего собственного API, который стоит за аутентификацией Azure.
Как мне сделать правильный вызов, который позволил бы мне аутентифицироваться на моем частном API с использованием аутентификации Azure?