如何为Azure应用程序配置同意(AADSTS65005错误)

时间:2017-09-02 03:20:28

标签: azure oauth azure-active-directory adal service-principal

我们有一个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.

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

2 个答案:

答案 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   客户实施注册:

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

  2.   
  3. 除了公开API的范围/角色外,请确保   注册包括&#34;登录和阅读用户个人资料&#34; Azure AD   许可(默认提供)

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

  6.   
  7. 一旦用户同意该应用程序,服务主体和   同意授权链接在其租户和本机中创建   应用程序可以获取API的令牌

  8.   

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

实现这一目标的唯一方法是让管理员单独同意API和应用程序,因为它们已在不同的租户中注册。

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

答案 1 :(得分:0)

以我为例,我公开了自己的API并尝试从其他应用程序(客户端凭据模式)访问此API,因此我删除了该应用程序(使用应用程序和api应用程序)的默认权限-“ Azure Active目录图->用户。已读”,因为我认为我不需要它,但导致了此问题“该应用需要访问您的组织尚未订阅或未启用的服务...。请与您的IT管理员联系以进行审核服务和订阅的配置。

我从@juunas的答案中得到了线索-第2点。ThxJuunas