Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure AD不显示用户同意页,并在登录时返回AADSTS65001,仅适用于某些广告租户_Azure_Active Directory_Azure Active Directory_Adal_Microsoft Graph Api - Fatal编程技术网

Azure AD不显示用户同意页,并在登录时返回AADSTS65001,仅适用于某些广告租户

Azure AD不显示用户同意页,并在登录时返回AADSTS65001,仅适用于某些广告租户,azure,active-directory,azure-active-directory,adal,microsoft-graph-api,Azure,Active Directory,Azure Active Directory,Adal,Microsoft Graph Api,我们有两个不同的不相关的广告组织(租户)。还有一个AngularJS网站,它想通过用户的广告帐户(OAuth,与使用Facebook或Google flow登录相同)登录用户,或者使用用户基本档案中的一些预先填写的信息进行注册。我们使用adal.js库,而不使用adal-angular.js 每个租户都在“应用程序注册”部分创建了自己的单个租户应用程序 问题 登录和注册都与第一个租户的应用程序完美配合。用户登录login.microsoftonline.com/{tenant id}(为了简洁起

我们有两个不同的不相关的广告组织(租户)。还有一个AngularJS网站,它想通过用户的广告帐户(OAuth,与使用Facebook或Google flow登录相同)登录用户,或者使用用户基本档案中的一些预先填写的信息进行注册。我们使用adal.js库,而不使用adal-angular.js

每个租户都在“应用程序注册”部分创建了自己的单个租户应用程序

问题 登录和注册都与第一个租户的应用程序完美配合。用户登录
login.microsoftonline.com/{tenant id}
(为了简洁起见,我们称之为“MS page”),看到“用户同意”页面,接受授予权限,MS page重定向回我们的网站,url中带有id_令牌,我们的应用程序发送访问_令牌的请求并成功接收

但对于第二个租户的应用程序,它收到的是AADSTS65001
\error=interaction\u required&error\u description=AADSTS65001:+user+或+administrator+已+未+同意+使用+应用程序+带+ID+'ff1bb76e-7823-45a1-9950-b38fe8d3d0b4'。+发送+交互+授权+请求+此+用户+和+资源。&Trace+ID=…
在他们登录后尝试获取访问令牌时但未显示“用户同意”页面,并且在此之前没有错误消息

所有交互都发生在MS页面上,在两个不同的广告组织/租户的两个不同应用程序中工作方式不同,这有点令人困惑

两个应用程序中的内容相同:

  • 我们的网站代码在这两种情况下是相同的(除了租户id和客户端id ofc),它被部署到相同的url
  • 两个应用程序的配置是相同的(不能保证这一点,但我们有一个“共享屏幕”调用,其中我们检查了清单以及我们知道的所有设置和权限具有相同的值)
  • 这两个应用程序都是在新的Azure门户中从头开始创建的,我们只在清单和回复URL中设置了
    oauth2AllowImplicitFlow:true
    ,没有更改其他设置
  • 两个应用在所需权限中仅设置了一个权限:Windows Azure Active Directory-“登录并读取用户配置文件”委派权限
我们的adal配置如下所示:

var adAccessTokenResource: = 'https://graph.windows.net' 
var adalOptions = {
      tenant: tenantId,
      clientId: clientId,
      resource: adAccessTokenResource,
      endpoints: { graphApiUri: adAccessTokenResource },
      //popUp: true // does not work the same way for both true and false
}
不同的东西:

一个可能的区别是,我们的网站位于
subdomain.{org name}.com
,其中{org name}与使用名称的租户相同,因此用户在那里拥有帐户
username@{org name}.com
。这是原因吗

此外,对于第二个租户的某些帐户,
login.microsoftonline.com
重定向到特定于组织的页面以登录用户。但对于其他账户,情况并非如此,在这两种情况下,错误和行为是相同的

在使用Fiddler进行调试后,我们发现在这两种情况下MS page都发送相同的
POSThttps://login.microsoftonline.com/{租户id}/login
请求。但对于正在工作的应用程序,它会在用户同意页面上返回200个响应。如果用户同意-发送第二个请求
POST/{tenant id}/approvement/Grant
,返回带有id_令牌的302并重定向到我们的应用程序,这意味着用户已登录。我们的应用程序请求重定向上的访问令牌,此请求有效

对于非工作应用程序
POSThttps://login.microsoftonline.com/{tenant id}/login
立即返回带有id_令牌的302重定向,而不显示“用户同意”页面。因此,我们在第一个请求之后得到一个重定向。我们的应用程序请求访问令牌,但收到一个错误,表示未给予同意

问题: 行为差异的可能原因是什么

还是应该只使用多租户应用程序?首先,我们想让它与单租户应用程序一起工作

我是Azure AD的新手。任何帮助都将不胜感激。

根据的回答,AAD的PM说,要为多租户实现
adal.js
,我们可以将
tenant\u id
设置为
common
,并在登录端点中附加额外参数
prompt=admin\u approve
。我尝试了一个测试代码项目,在我这方面效果很好

请参考
adal.js
中的以下配置:

    var configOptions = {
        tenant: "common", // Optional by default, it sends common
        clientId: "<client_id>",
        extraQueryParameter: 'prompt=admin_consent',
        postLogoutRedirectUri: window.location.origin,
    }
    window.authContext = new AuthenticationContext(configOptions);
var配置选项={
租户:“common”,//默认为可选,发送common
客户ID:“,
extraQueryParameter:'prompt=admin\u approve',
postLogoutRedirectUri:window.location.origin,
}
window.authContext=新的AuthenticationContext(配置选项);

作为一个更新,我们最终通过一些丑陋的黑客手段实现了这一点,但通过新的msal库(同样来自微软,是adal lib的正式替代品),我们的AD登录代码变得更小更好,我们没有问题


因此,请使用library而不是过时的adal.js one

谢谢!Hovewer,关于为什么它不能作为两个单一租户应用程序工作的任何信息?AAD的授权应遵循中的一个场景,其工作流程不能同时实现两个不同的应用程序。这是OAuthV1的限制。关于多租户集成,您也可以参考。是的,但它们不是同时实现的。我在代码中更改租户id和客户端id并重新部署它。所以在任何给定的时间只有一个应用程序在使用。如果是这样,这不是一个多租户的情况,很抱歉,我可能无法跟上你,那么你目前的问题是什么?它解决了你的问题吗?我还没有尝试多租户和管理员同意,因为我没有全局管理员帐户,但我会的。我的问题是,AD与第一个租户/客户机id对一起工作,但当我用第二个租户对替换它们时,它不会工作(细节在问题中)