Здравствуйте! Я хочу продлить срок действия токена доступа моей регистрации в 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. Два замечания по этому поводу:
- У меня нет прав доступа для установки этого значения на true, поскольку это влияет на весь арендатор.
- Я не хочу устанавливать это на true. потому что это также повлияет на любого другого пользователя, который создает регистрацию приложения и получает токен доступа.
Кто-нибудь видит, что мне не хватает, что я забыл сделать или что я сделал неправильно.