1

我正在尝试通过 CLI 2.x 添加 Graph API。这是我正在运行的 PowerShell 脚本:

    #
    # (1) Register the app, replyUrl, enable implicitflow
    #
    Write-Host " -  Create Application " + $appName
    az ad app create --display-name "$appName" --reply-urls "$replyUrl" --oauth2-allow-implicit-flow true

    #
    # (2) get the app id into a variable
    #
    $appId=$(az ad app list --display-name $appName --query [].appId -o tsv)

    #
    # (3) API Permissions, add Graph API/Permission (delegated)
    
    #
    Write-Host " -  Add Graph API/Permission (delegated)"
    az ad app permission add --id $appid --api 00000002-0000-0000-c000-000000000000 --api-permissions 311a71cc-e848-46a1-bdf8-97ff7156d8e6=Scope
    
    #
    # (4) Grant permissions based on the error/warning from the previous step
    
    #
    Write-Host " -  Grant permissions"
    az ad app permission grant --id $appid --api 00000002-0000-0000-c000-000000000000

--api-permissions id从这个链接中提取了。脚本行az ad app permission add抛出此错误(或警告):

az :需要调用az ad app permission grant --id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --api 00000002-0000-0000-c000-000000000000才能使更改生效 At C:\temp\CP\CreateAppRegistration.ps1:42 char:5 az ad app permission add --id $appid --api 00000002-0000-0000-c00 ... CategoryInfo : NotSpecified: (Invoking "az ad...hange effective:String) [], RemoteException FullyQualifiedErrorId : NativeCommandError

然后我尝试在错误中调用脚本az ad app permission grant并得到以下错误:

az :操作失败,状态为:“未找到”。详细信息:404 客户端错误:未找到 url: https ://graph.windows.net/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/oauth2PermissionGrants?$filter=clientId%20eq%20%27e62c4745-cccc-cccc-cccc-71e5599261fc%27&api-version=1.6 At C:\temp\CP\CreateAppRegistration.ps1:45 char:5 az ad app 权限授予 --id $appid --api 00000002-0000-0000-c ... CategoryInfo : NotSpecified: (操作失败...api- version=1.6:String) [], RemoteException FullyQualifiedErrorId : NativeCommandError

有人可以帮助我了解我是否需要根据上面 #3 生成的错误执行脚本(上面的 #4)吗?
或者为什么上面的#3 返回错误/警告?

我说警告是因为似乎确实添加了 Graph API,但我不确定它是否处于错误消息中的正确状态。

az ad app permission grant --id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --api 00000002-0000-0000-c000-000000000000需要使更改生效

4

1 回答 1

1

理论上,您需要根据上面 #3 生成的警告执行脚本(上面的 #4)。

您收到“404 Client Error: Not Found for url”意味着端点https://graph.windows.net/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/oauth2PermissionGrants?$filter=clientId%20eq%20%27e62c4745-cccc-cccc-cccc-71e5599261fc%27&api-version=1.6返回空结果。

cmdaz ad app permission grant会先查询它,然后插入新的权限。错误发生在查询步骤中。我不认为这是合理的。您的要求是添加权限授予,但是此 cmd 需要先查询现有的权限授予。如果结果为空,则会阻止您添加它。

所以这个 cmd 的逻辑az ad app permission grant目前并不完美。它对于现有的 Azure AD 应用程序(具有服务主体)可能更有效,但不适用于新创建的 Azure AD 应用程序(没有服务主体)。

一种解决方法是使用az ad app permission admin-consent --id $appid而不是az ad app permission grant. 请参阅此处的参考。它涵盖了az ad app permission grant可以做什么。

执行az ad app permission admin-consent一次后,它将为 Azure AD 应用程序生成一个服务主体,然后您可以az ad app permission grant稍后使用。

于 2020-07-14T07:37:56.193 回答