mar*_*icz 5 oauth-2.0 openid-connect keycloak implicit-flow
我目前正在移动应用中使用OpenID Connect/Oauth2 Implicit Flow.我正在为用户提供Web视图以登录并获取访问令牌和到期日期.但是,当访问令牌过期时,是否需要让用户再次登录?或者有没有办法使用当前的方式静默获取新的访问令牌,而不会窃听用户.我想另一个选择是将令牌到期设置为很长时间,但我已经读到这是一个坏主意.
我在这里错过了什么吗?
由于隐式流不发送刷新令牌(如RFC6746第 9 节中所述),因此不可能使用刷新令牌。但作为一种解决方法,可以使用客户端凭据授予来获取访问令牌。
一个可行的解决方案是首先遵循隐式流程并对客户端进行身份验证。然后客户端身份验证授权可用于执行所需的 API 调用。
示例请求(来自RFC6749)
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
Run Code Online (Sandbox Code Playgroud)
示例响应(来自RFC6749)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"example_parameter":"example_value"
}
Run Code Online (Sandbox Code Playgroud)
PS -
如果您正在使用授权代码流,您可以使用它refresh_token来获取新的访问令牌。可以从OAuth2 文档中获取如何形成请求。请注意,为此,您的授权响应应包含“refresh_token”。
刷新令牌应该像用户凭证一样受到保护。可以从这里的keycloak 文档中阅读更多内容
示例请求和响应(来自RFC6749)
要求
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
Run Code Online (Sandbox Code Playgroud)
回复
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "TlBN45jURg",
"token_type": "Bearer",
"refresh_token": "9yNOxJtZa5",
"expires_in": 3600
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4932 次 |
| 最近记录: |