Расширение приложения Accestoken LifeTime Azure AD - PullRequest
1 голос
/ 15 апреля 2020

Здравствуйте! Я хочу продлить срок действия токена доступа моей регистрации в Azure приложении. Я понимаю, что уже было много SO вопросов, но ни один из них, похоже, не работает, поэтому вместо ответа на каждый из них своим вопросом, я догадался, что создаю новый вопрос.

Я использую следующий код PowerShell создать политику Azure AD, чтобы продлить срок службы и присоединить ее к регистрации моего приложения.

  # import the azure ad module
Import-Module AzureADPreview

# connect with an admin with proper priviledges
Connect-AzureAD

# specify the policyname and Azure application name

$policyName = "ExtendedLifeTimePolicyADAppRegistration"
$applicationName = "AzureTest"


Write-Host "Create a new policy"
$policy = New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"04:00:00","MaxInactiveTime":"04:00:00","MaxAgeMultiFactor":"04:00:00","MaxAgeSingleFactor":"04:00:00"}}') -DisplayName $policyName -IsOrganizationDefault $false -Type "TokenLifetimePolicy"

# Get the Azure AD application  
$app = Get-AzureADApplication -Filter "DisplayName eq '$applicationName'"
Write-Host "Apply the new policy"
Add-AzureADApplicationPolicy -Id $app.ObjectId -RefObjectId $policy.Id

Write-Host "Get assigned policies..."
Get-AzureADApplicationPolicy -Id $app.ObjectId

Код ошибки не отображался, и Get-AzureADApplicationPolicy вернул, что политика подключена к моему azure ad application.

Следующий код распечатывает токен доступа и срок действия: я использовал этот код для распечатки токена доступа из Azure регистрации приложения AD.

disconnect-azurermaccount
 if(-not (Get-Module AzureRm.Profile)) {
    Import-Module AzureRm.Profile
  }

function Get-AzureRmCachedAccessToken()
{
    $ErrorActionPreference = 'Stop'

    if(-not (Get-Module AzureRm.Profile)) {
        Import-Module AzureRm.Profile
    }
    $azureRmProfileModuleVersion = (Get-Module AzureRm.Profile).Version
    # refactoring performed in AzureRm.Profile v3.0 or later
    if($azureRmProfileModuleVersion.Major -ge 3) {
        $azureRmProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
        if(-not $azureRmProfile.Accounts.Count) {
            Write-Error "Ensure you have logged in before calling this function."    
        }
    } else {
        # AzureRm.Profile < v3.0
        $azureRmProfile = [Microsoft.WindowsAzure.Commands.Common.AzureRmProfileProvider]::Instance.Profile
        if(-not $azureRmProfile.Context.Account.Count) {
            Write-Error "Ensure you have logged in before calling this function."    
        }
    }

    $currentAzureContext = Get-AzureRmContext
    $currentAzureContext
    $profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azureRmProfile)
    Write-Debug ("Getting access token for tenant" + $currentAzureContext.Tenant.TenantId)
    $currentAzureContext.TokenCache.ReadItems()
    $token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId)
   echo "####"
    $token

     echo "####"
}
$tenantId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$ClientID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


    $passwd = ConvertTo-SecureString $ClientSecret -AsPlainText -Force
    $pscredential = New-Object System.Management.Automation.PSCredential($ClientId, $passwd)


    #Connect-AzurermAccount -Credential $pscredential -Tenant $tenantId 
    Add-AzureRmAccount -Credential $pscredential -TenantId $tenantId  -ServicePrincipal
    Get-AzureRmCachedAccessToken

Первый Я думал, что мой код для захвата токена доступа недостаточно действителен, потому что он кэшируется, поэтому я попробовал следующий код из MS сделать c, следуя по этой ссылке в почтальоне. Но это имеет тот же результат, что и предыдущий код PowerShell. это тот же срок действия по умолчанию, что и 1 час.

В предыдущих вопросах SO я видел, что люди, которые изменили переменную IsOrganizationDefault на «true», действительно применили политику AD. Два замечания по этому поводу:

  1. У меня нет прав доступа для установки этого значения на true, поскольку это влияет на весь арендатор.
  2. Я не хочу устанавливать это на true. потому что это также повлияет на любого другого пользователя, который создает регистрацию приложения и получает токен доступа.

Кто-нибудь видит, что мне не хватает, что я забыл сделать или что я сделал неправильно.

1 Ответ

1 голос
/ 17 апреля 2020

Согласно моему тесту, он работает только с -IsOrganizationDefault $true в настоящее время, независимо от того, используете ли Add-AzureADServicePrincipalPolicy или Add-AzureADApplicationPolicy, если -IsOrganizationDefault $false, оба не работают.

Обратите внимание на функцию Настраиваемое время жизни токенов в Azure Active Directory (предварительный просмотр) в предварительном просмотре, а используемые вами команды powershell находятся только в AzureADPreview. Я полагаю, что эта функция может быть реализована не полностью, поэтому она вызвала проблему.

...