使用 ADFS OAuth 刷新令牌
Using ADFS OAuth Refresh Token
我将 ADFS3 OAuth2 配置为 return 刷新令牌:
PS> Set-AdfsRelyingPartyTrust -TargetName "RPT Name" -IssueOAuthRefreshTokensTo AllDevices
PS> Set-AdfsRelyingPartyTrust -TargetName "RPT Name" -TokenLifetime 10
PS> Set-AdfsProperties -SSOLifetime 480
此处访问令牌持续 10 分钟,刷新令牌持续 480 分钟。
然后我通过 GETing 生成访问令牌:
https://myadfsdomain/adfs/oauth/authorize
?response_type=code
&client_id=MYCLIENTID
&redirect_uri=https://myserver/callback
&resource=MYRelyingPartyId
和 POST 对 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
获取另一个访问令牌?即:
- 什么是URL?
- 我们POST吗?
- 我们使用什么参数名称来 POST
refresh_token
?
刷新令牌授予类型也会针对您用于交换授权代码的令牌端点执行。您应该根据 RFC 使用 POST:https://www.rfc-editor.org/rfc/rfc6749#section-6 并至少提供参数 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...>
我将 ADFS3 OAuth2 配置为 return 刷新令牌:
PS> Set-AdfsRelyingPartyTrust -TargetName "RPT Name" -IssueOAuthRefreshTokensTo AllDevices
PS> Set-AdfsRelyingPartyTrust -TargetName "RPT Name" -TokenLifetime 10
PS> Set-AdfsProperties -SSOLifetime 480
此处访问令牌持续 10 分钟,刷新令牌持续 480 分钟。
然后我通过 GETing 生成访问令牌:
https://myadfsdomain/adfs/oauth/authorize
?response_type=code
&client_id=MYCLIENTID
&redirect_uri=https://myserver/callback
&resource=MYRelyingPartyId
和 POST 对 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
获取另一个访问令牌?即:
- 什么是URL?
- 我们POST吗?
- 我们使用什么参数名称来 POST
refresh_token
?
刷新令牌授予类型也会针对您用于交换授权代码的令牌端点执行。您应该根据 RFC 使用 POST:https://www.rfc-editor.org/rfc/rfc6749#section-6 并至少提供参数 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...>