我们有一个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.
我们不可能在访问我们的应用程序(资源应用程序)的每个租户上配置服务主体。我们缺少什么?我们使用正确的流量吗?
答案 0 :(得分:0)
您可以在此处找到有关您的方案的帮助:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devhowto-multi-tenant-overview#understanding-user-and-admin-consent。 (向下滚动到多个租户中的多个层)
在由API构建的API的情况下 除Microsoft之外的组织,API的开发人员需要 为客户提供同意申请的方式 他们的客户&#39;租户。
推荐的设计适用于第三方 开发人员构建API,使其也可以作为Web 客户实施注册:
按照前面的部分确保 API实现多租户应用程序注册/代码 要求
除了公开API的范围/角色外,请确保 注册包括&#34;登录和阅读用户个人资料&#34; Azure AD 许可(默认提供)
在中实施登录/注册页面 Web客户端,遵循前面讨论的管理员同意指南
- 醇>
一旦用户同意该应用程序,服务主体和 同意授权链接在其租户和本机中创建 应用程序可以获取API的令牌
基本上,您的应用所需的所有部分必须作为服务主体出现在客户的租户中。这是AAD的要求。
实现这一目标的唯一方法是让管理员单独同意API和应用程序,因为它们已在不同的租户中注册。
如果他们在同一个租户中注册,您可以使用清单中的 knownClientApplications 属性来同时允许两者同意。
答案 1 :(得分:0)
以我为例,我公开了自己的API并尝试从其他应用程序(客户端凭据模式)访问此API,因此我删除了该应用程序(使用应用程序和api应用程序)的默认权限-“ Azure Active目录图->用户。已读”,因为我认为我不需要它,但导致了此问题“该应用需要访问您的组织尚未订阅或未启用的服务...。请与您的IT管理员联系以进行审核服务和订阅的配置。
我从@juunas的答案中得到了线索-第2点。ThxJuunas