【问题标题】:Calling my own API secured by AzureAD V2 from another tenant从另一个租户调用我自己的受 AzureAD V2 保护的 API
【发布时间】:2019-06-13 15:52:49
【问题描述】:

我在自己的 Azure AD 租户中有一个 DotNet Core WebAPI。此 WebAPI 通过 AzureAD V2 (!) BearerToken 身份验证进行保护。此 API 由通过 OIDC (AzureAD v2) 验证的 Angular SPA 调用,使用 @azure/msal-angular 遵循 https://docs.microsoft.com/en-us/graph/tutorials/angular 的教程。我自己租户的用户一切正常。但是当使用另一个租户的用户登录时,我收到以下错误:

"AADSTS650052: The app needs access to a service
(\\\"https://mytenant.de/AngularDemoApi2\\\") that your organization
\\\"myorganization.de\\\" has not subscribed to or enabled. Contact your 
IT Admin to review the configuration of your service 
subscriptions.\r\nTrace ID: 9597578e-7e48-49b2-85be--b5a1ee14300\r\n
Correlation ID: 30d4caf2-e3ca-4d7d-84b5-564d428e4e69\r\n
Timestamp: 2019-06-13 15:40:46Z|invalid_client"

我已尝试遵循一些示例来使 WebApplication 和 WebAPI 多租户,但所有示例似乎都已过时和/或与 Azure AD V2 无关。 WebApplication 和 WebAPI 已设置

"signInAudience": "AzureADandPersonalMicrosoftAccount"

在清单中。 WebAPI 的 App Uri 形式为

https://mytenant.de/AngularDemoApi2"

我想我需要以某种方式授予其他租户的用户访问我租户中的 WebAPI 的权限,但我不知道如何。

编辑:当我选择直接从 SPA 的应用注册中公开 API 时,它就像一个魅力。但是这种方法似乎并不正确,因为每个公开的 API 都会有相同的受众(“aud”声称,与 SPA 应用程序相同的受众)。在上面的示例中,我有一个单独的应用程序注册 - 一个用于 SPA,一个用于 API。这样每个 API 都会有自己的受众,并且还会在同意屏幕中提及。

可能有人可以解释如何正确配置它?

【问题讨论】:

    标签: multi-tenant msal azure-ad-v2


    【解决方案1】:

    我遇到了同样的问题,对我来说,解决方案是将客户端作为“授权客户端应用程序”添加到 Azure 门户中的 WebAPI 应用注册

    这将在服务应用的清单中显示为以下形式的一个部分,其中 appId 是客户端应用的应用 id,permissionIds 包含客户端应用请求的范围的 id,可以从清单的"oauth2Permissions" 部分:

    "preAuthorizedApplications": [
        {
            "appId": "523ca2d4-680b-4ef4-8a8c-3f3486693cf7",
            "permissionIds": [
                "35e5e006-83c5-4f37-a3bf-c048ee8c8600"
            ]
        }
    ],
    

    在您的情况下,您可能必须首先将 Angular SPA 注册为客户端应用程序才能获取客户端 ID。这在this quickstart 中有描述。

    【讨论】:

    猜你喜欢
    • 2023-02-05
    • 2020-08-02
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多