用户权限管理

用户权限管理 #

  • 权限管理系统属于基础服务,负责用户身份的认证和授权;
  • 用户信息管理系统属于业务系统,管理用户在参与业务过程中的身份信息;

OAuth #

  • Resource Server:资源服务器。
  • Authorization Server:认证服务器。请求需要先通过认证才能访问资源服务器。
    • Authorization Grant Type:授权模式
      • Authorization Code:授权码模式。
      • Implicit:隐式授权。
      • Resource Owner Password Credentials:基于用户名和密码认证。
      • Client Credentials:基于客户端认证。
  • Client:用于管理不同客户端系统所能访问的授权范围。客户端可以是自己公司的系统,也可以说外部第三方应用。
    • resource_ids:资源服务器ID,用于分组处理资源服务器。
    • authorities:应用级别的权限,如管理员等。
    • scope:用户级别的权限,主要用于限制其它系统访问用户信息的范围,如邮箱、手机号等。
  • User:用户为全客户端共享。
  • Token:
    • accessToken:仅包含授权信息。
    • jwtToken:包含授权信息和用户信息,保存在客户端时可以实现去中心化。
    • refreshToken:用于延长Token的使用期限。

SSO #

单点登录:当用户在一个应用中登录后,访问其它应用时不用再次登录。当用户登出时,其它应用也一起登出。

OAuth系统对SSO的支持

通过实现只要一个Client登录成功后就省略其它Client的验证过程来实现单点登录。

XaaS #

  • Ternet:租户。XX即服务的最基础隔离单元,通常表现为Organzation或Company。
    • 租户隔离方式:
      • 同张表,通过租户ID区分数据。
      • 不同表,表名包含租户Id。
      • 动态调整。按租户级别动态调整隔离方式。如免费用户采用同表策略,付费用户采用不同表,VIP用户采用不同库/集群等。
  • Ternet Admin:租户管理员。创建租户时创建的用户,负责管理租户信息,即Organzation User。
  • Resource:租户租用的资源。在PaaS系统中可以为Server;在SaaS系统中可以为Application。一个租户可以租用多个资源。
  • Resource User:使用资源的用户。在SaaS系统中对应使用该系统的普通用户。

权限控制 #

  • ACL(Access Control List):访问控制列表,以Row为维度进行权限控制。在存储数据的同时保存据的读写权限。
    • 存储示例:write:1,2,3;read:* ,表示所有用户有读权限,但只有ID=1,2,3的用户同时拥有读写权限。
  • RBAC(Role-Based Access Control:):角色访问控制,基于角色分配权限,一个用户的权限等于其拥有的所有角色的权限集合。权限可以是模块、功能、菜单、接口、按钮等不同粒度。

安全性 #

密码脱敏 #

  • 对称加密:对称加密(AES、DES、3DES等)可以解密,安全性不高。
  • 单向加密/摘要算法:Md5、Sha1等算法无法防止彩虹表。
  • PBKDF2+Sha256:PBKDF2为密钥生成算法,加密过程为执行n次哈希算法(例如:Sha256)并加上随机盐生成密码。
  • Bcrypt:每次都随机生成hash和盐后保存在密码中。验证密码时,使用原密码和保存在密码中的盐计算后再和hash进行比较。虽然无法防止彩虹表,但由于加密速度可以维持在一个固定范围内,无法加速,所以彩虹表的生成成本较高。

密码保存方案推荐使用Bcrypt或BKDF2+Sha256。使用后者时可以在用户表中添加salt字段保存随机盐。

沪ICP备17055033号-2