1

我们有一个 Azure 资源应用程序,我们希望公开其 API 以供 Azure 上的客户端应用程序访问。这两个应用程序位于不同的租户上。访问 API 的用户(Office 365 帐户持有人)位于不同的租户中。

当我们在尝试从客户端应用程序对资源应用程序进行身份验证的租户上手动配置服务主体时,整个设置就可以工作。我的意思是他们能够使用他们的 Office 365 帐户登录并显示同意屏幕。

如果我们未在尝试进行身份验证的用户的 AAD 租户上配置服务主体,则会收到以下错误:

AADSTS65005 - The app needs access to a service <service> that your 
organization org.onmicrosoft.com has not subscribed to or enabled. Contact 
your IT Admin to review the configuration of your service subscriptions.

在访问我们的应用程序(资源应用程序)的每个租户上配置服务主体对我们来说是不可行的。我们缺少什么吗?我们是否使用了正确的流程?

4

2 回答 2

2

您可以在此处找到针对您的方案的帮助:https ://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devhowto-multi-tenant-overview#understanding-user-and-admin -同意。(向下滚动到多个租户中的多层

对于由 Microsoft 以外的组织构建的 API,API 的开发人员需要为其客户提供一种方法,让他们同意将应用程序纳入其客户的租户。

推荐的设计是让第 3 方开发人员构建 API,使其也可以作为 Web 客户端来实现注册:

  1. 按照前面的部分确保 API 实现多租户应用程序注册/代码要求

  2. 除了公开 API 的范围/角色外,请确保注册包括“登录并读取用户配置文件”Azure AD 权限(默认提供)

  3. 按照前面讨论的管理员同意指南,在 Web 客户端中实施登录/注册页面

  4. 用户同意应用程序后,将在其租户中创建服务主体和同意委托链接,并且本机应用程序可以获取 API 的令牌

基本上,您的应用所需的所有部分都必须作为服务主体存在于客户的租户中。这是 AAD 的要求。

发生这种情况的唯一方法是管理员分别通过 API 和应用程序的同意,因为它们在不同的租户中注册。

如果它们在同一个租户中注册,您可以使用清单中的knownClientApplications属性来允许同时同意两者。

于 2017-09-02T10:18:41.657 回答
0

在我的情况下,我公开了我自己的 API 并尝试从我的其他应用程序(客户端凭据模式)访问此 API,我删除了两个应用程序(消费应用程序和 api 应用程序)的默认权限 - “Azure Active Directory Graph- > 用户。阅读”,因为我认为我不需要它,但这导致了这个问题“应用程序需要访问您的组织尚未订阅或启用的服务....联系您的 IT 管理员以查看配置您的服务+订阅。

我从@juunas 的回答中得到了线索——第 2 点。谢谢 Juunas

于 2020-04-16T21:49:02.867 回答