我正在尝试运行此脚本,但出现此错误:
New-AzureADApplication:执行NewApplication时发生错误
代码:Authentication_MissingOrMalformed
消息:访问令牌丢失或格式错误。
Import-Module AzureAD -Force
$rmAccount = Add-AzureRmAccount
$subscriptionId = $rmAccount.Context.Subscription.Id
$tenantId = $rmAccount.Context.Tenant.Id
$tokenCache = $rmAccount.Context.TokenCache
$cachedTokens = $tokenCache.ReadItems() `
| where { $_.TenantId -eq $tenantId } `
| Sort-Object -Property ExpiresOn -Descending
$infos = Connect-AzureAD -TenantId $tenantId `
-AadAccessToken $cachedTokens[0].AccessToken `
-AccountId $rmAccount.Context.Account.Id
$clientAadApplication = New-AzureADApplication -DisplayName "TodoListClient-NativeDotNet" `
-ReplyUrls "https://TodoListClient-NativeDotNet" `
-PublicClient $True
$currentAppId = $clientAadApplication.AppId
$clientServicePrincipal = New-AzureADServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp}
$currentAppId = $clientAadApplication.AppIds
我想做的是在不依赖Azure门户的情况下自动在Azure Active Directory中注册本机应用程序,因此我使用Add-AzureRmAccount
登录以获得TenantId
和SubscriptionId
,然后我使用缓存的令牌连接到AzureAD,以防止再次登录。
答案 0 :(得分:0)
运行Add-AzureRmAccount
时获得的令牌是针对https://management.core.windows.net
受众的,但适用于Azure AD cmdlet need a token for Azure AD Graph audience(https://graph.windows.net
)。因此,在调用New-AzureADApplication
时不能重用该令牌。您应该在Azure RM或Azure AD cmdlet之间进行选择,但不能两者都选。但据我所知New-AzureRmADApplication
不支持创建本机应用程序,因此您应该仅使用Azure AD cmdlets。
答案 1 :(得分:0)
您已经接近了,但是您从AzureRMAccount传递的令牌不是您正在执行的操作的正确受众/资源。只需删除该位并运行以下类似操作,即可使用令牌的正确受众和资源权限。您始终可以通过将其复制并粘贴到https://jwt.ms(Microsoft有用的令牌调试器)中来检查令牌受众和范围。
Import-Module AzureAD -Force
Connect-AzureAD
$clientAadApplication = New-AzureADApplication -DisplayName "TodoListClient-NativeDotNet" `
-ReplyUrls "https://TodoListClient-NativeDotNet" `
-PublicClient $True
$currentAppId = $clientAadApplication.AppId
$clientServicePrincipal = New-AzureADServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp}
$currentAppId = $clientAadApplication.AppIds