欢迎光临散文网 会员登陆 & 注册

keycloak域中tokens的配置

2023-03-15 10:19 作者:bfyxzls  | 我要投稿

keycloak域中tokens的配置

一 认证响应体

{

    "access_token""xxx",

    "expires_in"180,

    "refresh_expires_in"180,

    "refresh_token""xxx",

    "token_type""Bearer",

    "not-before-policy"1670293935,

    "session_state""28c2220c-0908-41d4-bb57-c1014d03ed2e",

    "scope""roles my-application-scope extension-roles email profile"

}

 

二 JWT数据载体

keycloak的Access_token(上面返回的)是JWT的,它的PAYLOAD数据载体主要包括用户ID,用户名,用户角色,过期时间等信息下面具体介绍:

Sub:用户ID

preferred_username:账号名称

Name:用户姓名

Email:电子邮件

realm_access:领域角色

resource_access:客户端(资源服务)角色

Azp:授权客户端

Typ:token的类型

Aud:被授权的客户端列表

Exp:token的过期时间

Iat:token建立的时间

Iss: 当前领域的开放APItoken颁发的机构,例如https://cas.pkulaw.com/auth/realms/fabao,只有来自这个域名的请求,才能使用咱们的token

三 tokens配置

选择域realms设置-tokens标签;新版本叫sessions

14.0.0截图

 

19.0.0截图

下面对每一项进行说明:

1. 收回 Refresh TokenRevoke Refresh Token):如果开启 refresh tokens只能使用一次,否则refresh token不会被收回并且可以使用多次。

2. SSO会话空闲时间SSO Session Idle):设置会话在过期之前可以空闲的时间长度,当会话过期时 Token 和浏览器会话都会被设置为无效。

3. SSO会话最长时间SSO Session Max):refresh_token的有效期一般比access_token的长,这也就是通过refresh_token来换取新的access_token的一个前提,下面来配置一个这两个token的超时时间refresh_token超时时间refresh_expires_in通过配置SSO Session Max进行设置

4. SSO Session Idle Remember Me记住密码空闲时间

5. SSO Session Max Remember Me记住密码最大超时时间

6. 离线会话的空闲时间Offline Session Idle):离线会话允许的空闲时间。你需要使用离线Token在这段时间内至少刷新一次否则会话就会过期,对接角色offline_access

7. Offline Session Max Limited开启离线token的不受限制

8. Client Session Idle客户端token空闲时间

9. Client Session Max【不知道它的实际作用】:客户端token的最大超时时间,在生成的JWT中指向expires_in,而客户端的refresh_expires_in永远是0,即永不过期,不过在测试 keycloak过程中发现,通过client_credentials的方式获取的access_token,它的有效期也是由Access Token Lifespan来控制的,就是说和其它认证获取的token有效期是一样的。

10. Access Token Lifespantoken的超时时间

11. 隐式认证token超时时间(Access Token Lifespan For Implicit Flow):Max time before an access token issued during OpenID Connect Implicit Flow is expired. This value is recommended to be shorter than SSO timeout. There is no possibility to refresh token during implicit flow, that's why there is a separate timeout different to 'Access Token Lifespan'.

12. Client login timeout客户端登录过程中超时时间

13. Login timeout登出的超时时间

 

四 refresh_token和access_token有效期配置

refresh_token的有效期一般比access_token的长,这也就是通过refresh_token来换取新的access_token的一个前提,下面来配置一个这两个token的超时时间。

refresh_token超时时间refresh_expires_in,在realms settings中,选择tokens进行配置,对SSO Session Max进行设置

 


access_token超时时间expires_in,在realms settings中,选择tokens进行配置,对Access Token Lifespan进行设置

这个用户会话,对应的sessionId(session_state)可以在浏览器cookie中找到,或者在kc管理后台的用户-》会话中查看,这个sessionId被客户端访问,都会刷新这个“最后访问”时间,如图

 


access_token时间到期后,用户在浏览器访问时,会出现会话过期,并且在kc管理后台会看到用户-》会话中的那边会话被删除。

 


如果用户访问资源,在token过期,而refresh_token(sso session max)未过期时,你可以通过refresh_token来获取新的token,这时会有新的会话产生;但如果refresh_token也过程时,它将跳转到登录页,从新进行认证。

五 refresh_token永久性

对于用户登录后,如果授权码模式,如果希望refresh_token永不过期,可以使用offline_access这种scope ,前提是需要为用户添加这个offline_access角色。

 


生成的refresh_token的超时时间将是0,即永不超时。

六 客户端认证

客户端认证client_credentials,获取的token中没有refresh_token,但出现了refresh_token的过期时间为0,它表示永不过期,或者对refresh_token无效。

没有refresh_token的解释:当使用客户端凭据授权时,客户端应用程序使用其客户端 ID 和客户端密码向授权服务器进行身份验证.如果获得授权,它会取回资源的访问令牌.在这种情况下没有用户交互,因此不需要发出刷新令牌.

当访问令牌过期时,客户端可以使用自己的凭据来请求新令牌.当客户端想要代表用户访问资源(当时可能没有与客户端交互)时,使用刷新令牌.

 

七 接口鉴权

权限校验方法:Org.keycloak.phone.utils.TokenUtils.requireRole方法

 


八 认证失败解析

1. 客户端失败

 

2. 密码认证失败

3. 授权码失败

相关文档参考

https://www.rfc-editor.org/rfc/rfc6749



keycloak域中tokens的配置的评论 (共 条)

分享到微博请遵守国家法律