ADFS 2016-OAuth2 SPA-静默获取新令牌

时间:2019-01-22 20:13:34

标签: oauth-2.0 single-page-application adfs4.0

我有一个SPA,其中用户在ADFS中进行身份验证,并且应用程序获取访问令牌。我正在尝试使用JS代码来模拟ADAL JS的功能,其中使用了隐藏的iframe向ADFS发出请求以获取新令牌。

这是iframe的“ src”值:

  

https://../adfs/oauth2/authorize?client_id=...&response_type=id_token&redirect_uri=...&prompt=none&domain_hint=...&login_hint=...&nonce= ...

ADFS配置有两个领域:AD和ADLDS(LDAP)。因此,我不确定我需要为ADLDS中的用户传递domain_hint和login_hint参数的值。

请求失败,并显示以下消息:

  

https://....html?client-request-id=...#error=login_required&error_description=MSIS9621%3a+Unable+to+handle+the+OAuth+authorization+request+without+getting+user+input

ADFS事件查看器显示此错误:

  

异常详细信息:   Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthNoPassiveException:MSIS9233:为OAuth授权请求找到了多个身份提供者,提示设置为none。无法完成家庭领域发现。

ADFS 2016实际上支持此功能吗?关于我在做什么错的任何想法吗?

1 个答案:

答案 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令牌(如果需要)也是必要的。

相关问题