【问题标题】:ADFS 2016 - OAuth2 SPA - Get a new token silentlyADFS 2016 - OAuth2 SPA - 静默获取新令牌
【发布时间】:2023-03-17 15:11:01
【问题描述】:

我有一个 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 授权请求找到多个身份提供程序,提示设置为无。无法完成家庭领域发现。

ADFS 2016 是否实际支持此功能?知道我做错了什么吗?

【问题讨论】:

  • 乔治,你尝试过我的回答吗?

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


【解决方案1】:

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 containopenid值。获取 ID 令牌也是必需的(如果需要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 2013-10-01
    • 2017-01-12
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2014-05-18
    相关资源
    最近更新 更多