从另一个租户调用由AzureAD V2保护的我自己的API

时间:2019-06-13 15:52:49

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

我有一个住在自己的Azure AD租户中的DotNet Core WebAPI。此WebAPI通过AzureAD V2(!)BearerToken身份验证进行保护。根据{{​​3}}上的教程,使用@azure/msal-angular通过OIDC(AzureAD v2)进行身份验证的Angular SPA调用此API。我自己的租户中的用户一切正常。但是,当与另一个租户中的用户登录时,出现以下错误:

"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都有自己的受众,并且也会在同意屏幕中提及。

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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,对我来说,解决方案是将客户端作为“授权客户端应用程序”添加到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中有描述。