我和我的同事正在尝试在 ADFS 2.2 中启用 OAuth。一切正常,只是服务器只传回访问令牌(有过期时间),并且在成功登录后不包含刷新令牌。关于这方面的文档很少,但有人知道需要更新哪些设置才能返回刷新令牌吗?
编辑:这建议的 OAuth 2.0 规范状态:
是否签发刷新令牌由授权服务器自行决定。如果授权服务器签发了刷新令牌,则在签发访问令牌时会包含该令牌
由于我收到了访问令牌,但没有收到刷新令牌,而且 ADFS 目前仅实现了 OAuth 的代码流,所以我猜 ADFS 团队选择不返回刷新令牌。不过,我很想听到这个确切的消息。
编辑:就像 Travis 下面说的那样,确保
- RP
IssueOAuthRefreshTokensTo
设置正确 - RP
AlwaysRequireAuthentication
是假的 - RP
TokenLifetime
低于 ADFSSSOLifetime
答案1
ADFS 依赖方对象上有一个名为 IssueOAuthRefreshTokensTo 的配置开关,用于控制向哪种类型的设备发出刷新令牌。默认情况下,此值设置为“NoDevice”,这意味着 ADFS 不会发布刷新令牌。可能的值包括
- NoDevice = 从不发出刷新令牌
- AllDevices = 始终发出刷新令牌
- WorkplaceJoinedDevices = 仅在已加入工作场所的设备上发出刷新令牌,即已使用 DRS 服务注册的设备。
除了验证依赖方是否允许颁发刷新令牌之外,ADFS 还将验证以下内容。
- 提供给 ADFS 的 SSO 令牌不会在 RP 的访问令牌过期之前过期。只要您没有更改默认配置值并且使用干净的浏览器会话(即没有 SSO cookie),这种情况就不会发生。
- 依赖方未被标记为始终需要新的凭证。
您还可以验证在授权请求中发送了有效的资源参数吗?
ADFS 有一个调试日志,如果您可以在非生产系统上重现此行为,那么识别问题的最简单方法可能是启用调试日志。
本文介绍如何在 ADFS 2.0 系统上启用调试日志。ADFS 3.0 (2012 R2) 类似,节点名称略有不同,您无需在配置文件中启用 WIF 或 WCF 跟踪。