使用 ADFS OAuth 刷新令牌
Posted
技术标签:
【中文标题】使用 ADFS OAuth 刷新令牌【英文标题】:Using ADFS OAuth Refresh Token 【发布时间】:2017-06-24 02:27:00 【问题描述】:我已将 ADFS3 OAuth2 配置为返回刷新令牌:
PS> Set-AdfsRelyingPartyTrust -TargetName "RPT Name" -IssueOAuthRefreshTokensTo AllDevices
PS> Set-AdfsRelyingPartyTrust -TargetName "RPT Name" -TokenLifetime 10
PS> Set-AdfsProperties -SSOLifetime 480
这里访问令牌持续 10 分钟,刷新令牌持续 480 分钟。
然后我通过 GET 生成访问令牌:
https://myadfsdomain/adfs/oauth/authorize
?response_type=code
&client_id=MYCLIENTID
&redirect_uri=https://myserver/callback
&resource=MYRelyingPartyId
并发布responseCode
例如:
$http(method: "post",
headers: 'Content-Type': 'application/x-www-form-urlencoded',
url: "https://myadfsdomain/adfs/oauth2/token",
data: "client_id=MYCLIENTID&code=" + responseCode + "&redirect_uri=https://myserver/callback&grant_type=authorization_code" )
响应包含访问令牌、类型、过期时间和刷新令牌:
"access_token":"blah...",
"token_type":"bearer",
"expires_in":600,
"refresh_token":"blahblah..."
太好了。访问令牌现在无论配置多久都有效(此处为 10 分钟)
问题是,一旦该时间到期,我们如何使用refresh_token
来获取另一个访问令牌?即:
refresh_token
?
【问题讨论】:
【参考方案1】:刷新令牌授予类型也会针对您用来交换授权码的令牌端点执行。您应该根据 RFC:https://www.rfc-editor.org/rfc/rfc6749#section-6 使用 POST,并至少提供参数 grant_type
和 refresh_token
。一个示例,基于 RFC 中的示例:
POST /adfs/oauth2/token HTTP/1.1
Host: myadfsdomain
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=<blahblah...>
【讨论】:
以上是关于使用 ADFS OAuth 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章
使用 AD FS 4.0 (2016) 或更高版本获取新的刷新令牌