我有一个SPA,其中用户在ADFS中进行身份验证,并且应用程序获取访问令牌。我正在尝试使用JS代码来模拟ADAL JS的功能,其中使用了隐藏的iframe向ADFS发出请求以获取新令牌。
这是iframe的“ src”值:
ADFS配置有两个领域:AD和ADLDS(LDAP)。因此,我不确定我需要为ADLDS中的用户传递domain_hint和login_hint参数的值。
请求失败,并显示以下消息:
ADFS事件查看器显示此错误:
异常详细信息: Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthNoPassiveException:MSIS9233:为OAuth授权请求找到了多个身份提供者,提示设置为none。无法完成家庭领域发现。
ADFS 2016实际上支持此功能吗?关于我在做什么错的任何想法吗?
答案 0 :(得分:0)
prompt=none
请求参数表示您希望在没有用户交互的情况下传递/authorize
请求的过程。但是在处理过程中,有些事情需要用户交互-服务器可能不知道要选择哪个身份提供者,因此它返回错误。如果仅通过将/authorize
URL粘贴到浏览器中而不使用prompt=none
参数来发出相同的请求,则服务器可能会为您提供选择提供商的可能性。
您写了您想要获取访问令牌的信息,但是您的/authorize
URL包含response_type=id_token
。如果需要访问令牌,则参数应为response_type=token
(请参见RFC)。
从Azure doc看,OpenID Connect支持domain_hint
请求参数,因此您的请求scope
参数should contain openid
的值。获取ID令牌(如果需要)也是必要的。