执行New-AzureADApplication时Authentication_MissingOr格式错误

时间:2018-07-02 08:17:27

标签: powershell azure-active-directory

我正在尝试运行此脚本,但出现此错误:

  

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登录以获得TenantIdSubscriptionId,然后我使用缓存的令牌连接到AzureAD,以防止再次登录。

2 个答案:

答案 0 :(得分:0)

运行Add-AzureRmAccount时获得的令牌是针对https://management.core.windows.net受众的,但适用于Azure AD cmdlet need a token for Azure AD Graph audiencehttps://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