支持 ADFS 2.2 OAuth 流程中的刷新令牌

支持 ADFS 2.2 OAuth 流程中的刷新令牌

我和我的同事正在尝试在 ADFS 2.2 中启用 OAuth。一切正常,只是服务器只传回访问令牌(有过期时间),并且在成功登录后不包含刷新令牌。关于这方面的文档很少,但有人知道需要更新哪些设置才能返回刷新令牌吗?

编辑:建议的 OAuth 2.0 规范状态:

是否签发刷新令牌由授权服务器自行决定。如果授权服务器签发了刷新令牌,则在签发访问令牌时会包含该令牌

由于我收到了访问令牌,但没有收到刷新令牌,而且 ADFS 目前仅实现了 OAuth 的代码流,所以我猜 ADFS 团队选择不返回刷新令牌。不过,我很想听到这个确切的消息。

编辑:就像 Travis 下面说的那样,确保

  • RPIssueOAuthRefreshTokensTo设置正确
  • RPAlwaysRequireAuthentication是假的
  • RPTokenLifetime低于 ADFSSSOLifetime

答案1

ADFS 依赖方对象上有一个名为 IssueOAuthRefreshTokensTo 的配置开关,用于控制向哪种类型的设备发出刷新令牌。默认情况下,此值设置为“NoDevice”,这意味着 ADFS 不会发布刷新令牌。可能的值包括

  1. NoDevice = 从不发出刷新令牌
  2. AllDevices = 始终发出刷新令牌
  3. WorkplaceJoinedDevices = 仅在已加入工作场所的设备上发出刷新令牌,即已使用 DRS 服务注册的设备。

除了验证依赖方是否允许颁发刷新令牌之外,ADFS 还将验证以下内容。

  1. 提供给 ADFS 的 SSO 令牌不会在 RP 的访问令牌过期之前过期。只要您没有更改默认配置值并且使用干净的浏览器会话(即没有 SSO cookie),这种情况就不会发生。
  2. 依赖方未被标记为始终需要新的凭证。

您还可以验证在授权请求中发送了有效的资源参数吗?

ADFS 有一个调试日志,如果您可以在非生产系统上重现此行为,那么识别问题的最简单方法可能是启用调试日志。

本文介绍如何在 ADFS 2.0 系统上启用调试日志。ADFS 3.0 (2012 R2) 类似,节点名称略有不同,您无需在配置文件中启用 WIF 或 WCF 跟踪。

http://social.technet.microsoft.com/wiki/contents/articles/1407.how-to-enable-debug-logging-for-active-directory-federation-services-2-0-ad-fs-2-0.aspx

相关内容