security - 使用 TLS 连接时如何向客户端授予权限?
问题描述
我正在使用 TLS 对登录到我的服务器的客户端进行身份验证。
我想设置一些基于角色的访问权限,这样当他们登录时,他们只能根据他们的角色访问某些信息。
实现这一目标的最佳方法是什么?您可以在创建客户端证书时指定角色吗?你是根据客户的其他一些属性来做的吗?
谢谢!
解决方案
您可以将角色信息放入证书中(作为自定义 X.509v3 扩展),但是如果您需要更改其角色,则需要撤销并重新颁发证书。这似乎很头疼。
最好将“身份验证”和“授权”分开处理。使用证书作为“认证”;即证书证明他们是 DN 和 SAN 中列出的用户,然后您在“授权”服务/数据库中查找该 DN,告诉您该用户应具有哪些权限。如果您想要真正花哨,授权服务可以返回带有用户名/DN 和权限的签名 JWT,有点像自定义 SAML/OIDC 声明。
作为奖励,如果您决定在未来添加其他身份验证方法(例如 API 密钥、MFA 等),该系统将很好地扩展。
推荐阅读
- python - 什么是正确的 aws lambda python 输出格式到 aws lex。获取无效的 Lambda 响应
- influxdb - InfluxDB - 查询每个测量值
- javascript - 在没有时区转换的情况下转换日期格式?
- javascript - 这个域是可用的还是被占用的?在 Google 表格应用程序脚本中
- gitlab-ci - Gitlab-CI:在主分支上执行作业,或者是否在主分支上创建了标签?
- python - Numba/jit 函数列表作为函数参数
- java - 执行者线程在spring服务器线程响应后停止
- ckeditor5 - 有没有办法在 CKEditor 5 中监听撤消/重做堆栈事件
- azure-active-directory - 分页报表的行级别安全性
- r - R(Synth 包)中的综合控制方法:如何使用交叉验证?