【问题标题】:Azure Multi tenant app - request admin consent for roles of own applicationAzure 多租户应用程序 - 请求管理员同意自己应用程序的角色
【发布时间】:2020-07-21 07:31:44
【问题描述】:

我制作了一个多租户应用程序(客户端 ID:“abc-efg”),它需要我的客户租户图表的一些资源。为了获得他们图表的权限,我创建了一个我的客户的 Azure 管理员单击并同意的 URL:

https://login.microsoftonline.com/organizations/v2.0/adminConsent?client_id=abc-efg&scope=https://graph.microsoft.com/.default

如果我将应用程序权限(即 Groups.Read)添加到客户端 ID 为“abc-efg”的应用程序,客户将获得同意屏幕并可以将应用程序添加到他的租户。
这很好用!

我现在有另一个应用程序公开了一些自己的权限(即:Custom.Read.All)。应用程序公开这些权限,同时也拥有这些权限。这是需要的,因为该应用是受自定义权限保护的唯一 api 消费者。

我的应用现在需要客户的这些自定义权限,所以我尝试使用与图表相同的方式:

https://login.microsoftonline.com/organizations/v2.0/adminConsent?client_id=vwx-xyz&scope=api://vwx-xyz/.default

但这会引发错误消息:

应用程序正在为自己请求令牌。这个场景是 仅当使用基于 GUID 的应用程序指定资源时才支持 标识符。

所以我只用 GUID 试试:

https://login.microsoftonline.com/organizations/v2.0/adminConsent?client_id=vwx-xyz&scope=vwx-xyz

但是找不到这个应用,因为资源不存在。

如果我在谷歌上搜索此错误消息,我只能找到旧 V1 端点的 cmets,而不是 V2。

有人对此有解释吗?对于我自己的应用定义的权限,我如何为我的客户租户获取应用权限?

最后,我希望能够接收具有我客户的颁发者租户 ID 的令牌,但我自己的应用程序的角色/范围。

【问题讨论】:

    标签: oauth-2.0 azure-active-directory microsoft-identity-platform


    【解决方案1】:

    您不能为自己请求令牌,您必须创建两个应用程序,一个作为客户端应用程序,另一个作为 api 应用程序。你要确保这两个应用程序是多租户应用程序,然后使用客户端应用程序调用api应用程序。 here详细官方文档。

    对于多租户应用,here 是更详细的答案供您参考。

    更新:

    经过我的测试,如果要使用单个应用程序,步骤与我提供的链接基本相同:

    1. 使用 Powershell cmd New-AzureADServicePrincipal -AppId "{client id of your application}" 将应用程序作为企业应用程序添加到您的客户租户。
    2. 将用户重定向到 Microsoft 身份平台管理员同意端点,使用客户租户的管理员帐户登录以完成管理员同意。
    3. 如链接所述,您不能将api://{client id of app}/.default 用于scope,因为它会告诉您该应用程序不存在于客户租户中,您需要使用https://graph. microsoft.com/.default

    【讨论】:

    • 是的 - 我知道这种方式,但我不需要两个应用程序。如果我的 Web 应用程序公开并使用权限就足够了。如果我有两个应用程序,这会提高复杂性,我的客户需要两个注册两个客户端应用程序。同样在我的 id 令牌中,我将不再收到 API 权限,因此我的客户端应用程序将不得不再次调用来读取这些权限。就我而言,我有充分的理由只喜欢一个应用程序。
    • @DavidElsnerd 是的,您也可以使用单个应用程序,我在答案中进行了修改。
    • 谢谢。听起来不错。这是否意味着我需要对我的客户租户进行 powershell 访问?我不会得到这个...我只能发送他们的管理员可以同意的链接。还是我误解了什么?
    • @DavidElsner 您必须将应用程序添加到客户租户,否则客户租户将无法批准管理员对应用程序的同意。如果您无权使用 Powershell 访问您的客户租户,您可以让客户自己将应用程序添加到租户中。这是最简单的方法。
    • @DavidElsner 您好,如果我的回答对您有帮助,您能接受吗?
    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多