如何在Casdoor中生成并存储绑定用户的API密钥?
解决Casdoor中用户绑定API密钥的实现方案
Casdoor原生确实没有内置API密钥管理功能,要实现用户绑定的API密钥生成存储,同时搭建统一凭证存储中心,可以试试下面几个落地方案:
方案一:利用Casdoor用户自定义字段快速实现
Casdoor支持给用户添加自定义属性,直接用这个字段来存储API密钥信息:
- 在Casdoor后台的用户属性配置里,新增一个
api_keys字段,类型设为JSON数组,用来存储用户的多组密钥信息(每组包含密钥ID、哈希后的密钥值、创建时间、过期时间、权限范围) - 自己写一套密钥生成逻辑:用UUID生成唯一的密钥ID,生成32位以上的随机字符串作为密钥明文,然后用SHA-256对明文哈希,把哈希值、密钥ID、过期时间等信息存在用户的
api_keys字段里,明文密钥只返回给用户一次,绝不存储明文 - 认证时,客户端携带API密钥请求服务,服务端先对密钥明文哈希,再调用Casdoor的用户查询接口,获取对应用户的
api_keys字段,匹配哈希值并检查过期时间,通过后即可获取用户身份和权限
方案二:自建独立密钥服务,与Casdoor集成
如果不想改动Casdoor的现有配置,可搭建独立的API密钥管理服务,依托Casdoor做身份认证:
- 用户通过Casdoor的OAuth2/OpenID流程登录密钥管理服务,获取用户唯一标识
- 密钥服务生成API密钥,将密钥与用户ID绑定,存储在自己的数据库中
- 其他业务服务需要验证API密钥时,调用密钥服务的验证接口,密钥服务验证通过后,再调用Casdoor的接口获取用户的权限信息,完成授权
- 这种方式耦合度低,不用修改Casdoor,适合快速搭建
方案三:修改Casdoor源码添加原生API密钥功能
如果有二次开发能力,可以直接给Casdoor加原生API密钥模块:
- 在Casdoor的数据库模型中新增
ApiKey表,字段包含id、user_id、key_id、hashed_key、expire_at、scopes等,关联用户表 - 在Casdoor的后台管理界面新增API密钥管理页面,支持用户生成、查看、删除自己的密钥
- 新增API密钥认证接口,让外部服务可以直接调用Casdoor的接口验证密钥有效性
统一凭证存储中心的搭建思路
不管用哪种方案,要实现统一凭证管理,核心是整合Casdoor的现有认证能力(OAuth2、WebAuthn)和新增的API密钥能力:
- 对外提供统一的认证入口,接收客户端的凭证(API密钥、OAuth令牌等)
- 凭证中心自动识别凭证类型,调用对应的验证逻辑(API密钥查存储、OAuth令牌调用Casdoor验证)
- 验证通过后,统一返回用户身份、权限等信息给业务服务,实现一站式认证授权
内容的提问来源于stack exchange,提问作者borisdonchev
相关产品推荐
相关产品推荐

