Как программно получить токен доступа к Azure API Management? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь внедрить Azure Active Directory в моем экземпляре управления API с помощью Защитить API с помощью OAuth 2.0 с Azure Управление Active Directory и API do c. Do c предполагает, что для получения токена доступа мне нужно использовать портал разработчика.

Моя проблема: внешнее приложение будет взаимодействовать с API-интерфейсом управления. Есть ли способ пропустить портал разработчика и получить токен доступа программно?

1 Ответ

1 голос
/ 28 января 2020

Это боль, но благодаря Йосу Либену я могу сделать это с помощью этой функции Powershell

Он специально предназначен для предоставления доступа к API от имени организации, но, как вы можете видеть, вы можете извлечь команды для получить и использовать токен API.

Оригинальная ссылка автора: https://www.lieben.nu/liebensraum/2018/04/how-to-grant-oauth2-permissions-to-an-azure-ad-application-using-powershell-unattended-silently/

Function Grant-OAuth2PermissionsToApp{
    Param(
        [Parameter(Mandatory=$true)]$Username, #global administrator username
        [Parameter(Mandatory=$true)]$Password, #global administrator password
        [Parameter(Mandatory=$true)]$azureAppId #application ID of the azure application you wish to admin-consent to
    )

    $secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
    $mycreds = New-Object System.Management.Automation.PSCredential ($Username, $secpasswd)
    $res = login-azurermaccount -Credential $mycreds
    $context = Get-AzureRmContext
    $tenantId = $context.Tenant.Id
    $refreshToken = @($context.TokenCache.ReadItems() | where {$_.tenantId -eq $tenantId -and $_.ExpiresOn -gt (Get-Date)})[0].RefreshToken
    $body = "grant_type=refresh_token&refresh_token=$($refreshToken)&resource=74658136-14ec-4630-ad9b-26e160ff0fc6"
    $apiToken = Invoke-RestMethod "https://login.windows.net/$tenantId/oauth2/token" -Method POST -Body $body -ContentType 'application/x-www-form-urlencoded'
    $header = @{
     'Authorization' = 'Bearer ' + $apiToken.access_token
     'X-Requested-With'= 'XMLHttpRequest'
     'x-ms-client-request-id'= [guid]::NewGuid()
     'x-ms-correlation-id' = [guid]::NewGuid()
    }
    $script:url = "https://main.iam.ad.ext.azure.com/api/RegisteredApplications/$azureAppId/Consent?onBehalfOfAll=true"
    Invoke-RestMethod -Uri $url -Headers $header -Method POST -ErrorAction Stop
}
...