前言

大家好,我是老马。

今天我们来一起讨论下 sso 系统应该设计哪些核心的表?

项目

前后端合一:

privilege-admin 权限管理

前后端分离:

ums-server

ums-server-h5

需求

提供核心的接口能力。

保证对所有的接入方进行本身的权限验证。

chat

其他的重要能力

在设计一个全面的 SSO(Single Sign-On) 服务时,除了上述登录方式和验证能力外,您还需要考虑其他一系列核心能力,以确保系统的安全性、可用性和可扩展性。

以下是一些 SSO 服务应具备的核心能力:

1. 用户注册与管理能力

  • 用户注册:支持用户自行注册账户,并通过邮件或短信验证邮箱/手机号。
    • 接口:POST /api/register
    • 功能:根据用户名、邮箱、手机号等创建用户,支持密码强度校验。
  • 用户资料管理:支持用户更新个人信息,如邮箱、手机号码、头像等。
    • 接口:PUT /api/user/update
    • 功能:允许用户修改个人资料。
  • 密码重置:用户忘记密码时,能够通过邮箱或短信重置密码。
    • 接口:POST /api/password/reset/request
    • 接口:POST /api/password/reset/confirm
    • 功能:支持发送密码重置邮件或短信,并进行验证。

2. 会话管理能力

  • 会话创建与维护:支持用户登录后生成会话(Session),并在有效期内维护该会话,用户无需反复登录。
    • 接口:POST /api/session
    • 功能:登录成功后创建会话,生成 tokensession_id,并设置有效期。
  • 会话退出(登出):用户登出时,需要清理会话信息,包括 token 和服务器端的会话记录。
    • 接口:POST /api/logout
    • 功能:注销当前会话,删除用户的 session 信息。
  • 会话监控与管理:管理和监控所有活跃会话,支持管理员查看用户登录会话并主动注销不活跃会话。
    • 接口:GET /api/admin/sessions
    • 接口:POST /api/admin/sessions/revoke
    • 功能:查看用户的所有会话,并在必要时进行手动退出。

3. 多设备支持

  • 多设备登录支持:允许用户在多个设备上登录并管理会话,可以查看和删除其他设备的会话。
    • 接口:GET /api/user/devices
    • 接口:POST /api/user/devices/revoke
    • 功能:列出用户已登录的所有设备,并支持主动退出某个设备上的会话。

4. 权限与角色管理

  • 角色管理:根据业务需求设计角色体系,定义每个角色的权限范围,如管理员、普通用户等。
    • 接口:POST /api/roles
    • 接口:GET /api/roles
    • 功能:管理员可以创建、修改、删除角色,并指定角色对应的权限。
  • 权限控制:基于角色的权限控制,确保用户访问受限资源时,只有符合权限要求的用户才可以访问。
    • 接口:GET /api/permissions
    • 功能:根据角色赋予特定的访问权限,确保用户只能访问其角色允许的资源。

5. 审计与日志

  • 登录日志:记录用户的每次登录操作,包括登录时间、IP 地址、设备信息、登录状态等。
    • 接口:GET /api/logs/login
    • 功能:管理员可以查看用户的登录历史、登录失败记录以及异常登录的警告。
  • 操作日志:记录用户的操作行为,尤其是管理员操作,如角色分配、权限变更等。
    • 接口:GET /api/logs/activity
    • 功能:记录和展示管理员和用户的关键操作,供后续审计和追溯。
  • 异常与安全日志:记录系统中的异常事件,尤其是安全相关的事件,如多次密码错误、账户锁定等。
    • 接口:GET /api/logs/security
    • 功能:记录异常事件和潜在的安全威胁,供管理员监控系统健康状态。

6. 支持外部认证(Federated Identity)

  • 第三方认证集成:支持通过外部身份提供商(如 OAuth2.0、OpenID Connect、SAML 等)进行身份验证。
    • 接口:GET /api/auth/{provider}
    • 功能:集成第三方认证,允许用户使用 Google、Facebook、GitHub 等外部账号登录。
  • 身份联合:在多个系统间共享用户身份认证信息,用户无需重复登录。
    • 接口:POST /api/auth/federated
    • 功能:支持跨系统共享认证信息,例如通过 SAML 或 OAuth2.0 实现单点登录。

7. 认证策略与安全策略

  • 密码策略:设置密码强度要求(如最小长度、必须包含数字、字母和特殊字符等)。
    • 接口:GET /api/security/password-policy
    • 功能:定义和更新密码复杂度要求,确保密码安全性。
  • IP 白名单:限制用户只允许从特定 IP 地址范围登录。
    • 接口:GET /api/security/ip-whitelist
    • 接口:POST /api/security/ip-whitelist
    • 功能:管理员可以设置和管理可登录的 IP 地址范围。
  • 账号锁定机制:在连续多次输入错误密码后,锁定账户一定时间,以防止暴力破解。
    • 接口:GET /api/security/lockout-policy
    • 功能:管理账号锁定策略,防止恶意登录。
  • 设备指纹识别:增强设备安全性,通过设备指纹识别来验证登录请求是否来自同一设备。
    • 接口:POST /api/security/device-fingerprint
    • 功能:验证请求的设备指纹,并与已知设备信息进行比对。

8. 支持自定义认证扩展

  • 自定义认证流程:支持根据业务需求灵活配置认证流程,例如某些操作必须经过审批。
    • 接口:POST /api/auth/custom
    • 功能:可以自定义认证流程,支持在登录过程中插入额外的验证环节(如验证码、人机验证等)。

9. OAuth2 / OpenID Connect 实现

  • OAuth2 授权服务:允许客户端应用使用 OAuth2 标准进行授权认证,支持 Authorization Code Flow、Implicit Flow 等。
    • 接口:GET /oauth/authorize
    • 接口:POST /oauth/token
    • 功能:提供 OAuth2 授权和令牌生成接口,用于集成第三方应用的授权认证。
  • OpenID Connect 支持:基于 OAuth2 扩展,支持通过 OpenID Connect 协议进行身份认证。
    • 接口:GET /oidc/authorize
    • 接口:GET /oidc/userinfo
    • 功能:支持 OpenID Connect 的认证流程,用于获取用户的身份信息。

10. 系统健康检查与监控

  • 健康检查接口:提供系统健康状态接口,确保 SSO 系统的服务可用。
    • 接口:GET /api/health
    • 功能:检查系统各个模块的健康状态,及时发现并处理系统异常。
  • 实时监控:集成实时监控工具(如 Prometheus, Grafana 等),监控 SSO 系统的性能和安全事件。
    • 接口:GET /api/metrics
    • 功能:提供系统性能指标和安全事件的实时监控数据。

总结

SSO 系统的核心能力不仅仅限于提供各种登录和验证方式,还包括用户管理、权限管理、会话控制、日志审计、认证策略、安全防护以及与第三方系统的集成等功能。

系统设计时要考虑到用户体验、安全性和可扩展性,确保不同的业务场景都能够顺利实现,同时满足企业对安全合规性和用户管理的需求。

通过精心设计和细致的能力规划,您可以为用户提供便捷而安全的单点登录体验,同时确保系统的灵活性与高可用性。

参考资料