如何在Keycloak中创建用户专属个人访问令牌?
在Keycloak中实现个人访问令牌(PAT)
当然可以,Keycloak完全支持创建类似GitHub、GitLab的个人访问令牌(PAT),下面是几种实用的实现方案,覆盖从简单快速到精细权限控制的不同需求:
方案一:用内置功能快速生成(适合基础需求)
Keycloak自带的账户管理控制台支持用户自行生成PAT,步骤很简单:
- 管理员端先配置客户端:
- 登录Keycloak管理控制台,找到目标客户端,进入Settings标签页,开启
Direct Access Grants Enabled选项。
- 登录Keycloak管理控制台,找到目标客户端,进入Settings标签页,开启
- 用户自行生成令牌:
- 用户登录自己的账户控制台(路径一般为
/realms/{你的Realm名}/account)。 - 找到Security下的Personal Access Tokens(部分版本可能显示为Tokens)。
- 点击「Create Token」,设置令牌有效期、可选的权限范围,确认后就能拿到专属访问令牌。
- 用这个令牌做身份验证时,在请求Header里带上
Authorization: Bearer {生成的令牌}即可。
- 用户登录自己的账户控制台(路径一般为
方案二:基于UMA实现精细权限控制(适合复杂场景)
如果需要让令牌只能访问特定资源,用Keycloak的User Managed Access(UMA)功能最合适:
- 开启UMA:
- 在管理控制台的目标Realm里,进入Realm Settings,开启
UMA Enabled。
- 在管理控制台的目标Realm里,进入Realm Settings,开启
- 配置资源服务器:
- 新建一个客户端,类型选Resource Server,同时开启
Authorization Enabled。
- 新建一个客户端,类型选Resource Server,同时开启
- 用户生成带权限的令牌:
- 用户登录账户控制台,进入Resources页面创建自己的资源并设置权限规则。
- 再到Tokens页面生成绑定了这些资源权限的PAT,这样令牌就只能访问用户指定的资源。
方案三:自定义客户端调用接口生成(完全自主控制)
如果要完全自定义令牌生成的逻辑或流程,可以做一个专用客户端来调用Keycloak的令牌接口:
- 新建一个公共客户端(Public Client),开启
Direct Access Grants Enabled。 - 用户用自己的账号密码调用令牌接口:
发送POST请求到/realms/{你的Realm名}/protocol/openid-connect/token,参数如下:
接口返回的grant_type=password client_id={你的客户端ID} username={用户账号} password={用户密码} scope={可选的权限范围,比如openid}access_token就是用户的PAT,用户可以保存下来重复使用,直到过期。
注意点
- 令牌的默认有效期可以在Realm的Realm Settings -> Tokens里全局配置,生成令牌时也能单独设置更短/更长的有效期。
- 建议开启刷新令牌功能,用户可以用返回的
refresh_token获取新的访问令牌,不用每次都重新登录。 - 用户随时可以在账户控制台的Tokens页面撤销已生成的令牌,避免令牌泄露带来风险。
内容的提问来源于stack exchange,提问作者Michael Wurster
相关产品推荐
相关产品推荐

