菜单

认证与授权

相关源文件

本文档详细介绍了Mall电商系统的认证和授权机制,涵盖了管理员(后台用户)和客户(前台用户)的认证方式以及通过基于角色的访问控制系统进行的权限管理。

有关支持此系统的数据库模式详情,请参阅数据库模式,特别是用户管理表

1. 概述

Mall系统实现了两个独立但架构相似的认证系统:

  1. 管理员认证 - 面向后台管理员(mall-admin模块)
  2. 客户认证 - 面向前台客户(mall-portal模块)

两个系统均利用Spring Security和JWT(JSON Web Token)进行无状态认证和基于角色的授权。

1.1 认证架构

来源

2. 认证流程

2.1 登录流程

下图展示了管理员和客户用户的登录流程:

来源

2.2 API访问认证

登录后,客户端会在请求头中包含JWT令牌,用于后续的API请求。

来源

3. 管理员认证与授权

admin模块实现了一个全面的基于角色的访问控制(RBAC)系统,支持动态资源权限。

3.1 管理员用户和角色管理

管理员用户(UmsAdmin)可以被分配多个角色(UmsRole)。每个角色可以被授予访问特定资源(UmsResource)的权限,这些资源代表API端点。

来源

3.2 管理员认证操作

下表显示了管理员认证的主要操作:

操作API 端点方法描述实现
注册/admin/registerPOST创建新的管理员账户UmsAdminController.register()
登录/admin/loginPOST使用用户名/密码登录UmsAdminController.login()
获取信息/admin/infoGET获取当前管理员信息和权限UmsAdminController.getAdminInfo()
登出/admin/logoutPOST退出登录并清除缓存UmsAdminController.logout()
刷新令牌/admin/refreshTokenGET刷新JWT令牌UmsAdminController.refreshToken()

来源

3.3 动态资源授权

admin模块使用自定义安全过滤器实现基于动态资源的授权。

  1. 所有API资源均在数据库中定义(UmsResource 表)。
  2. 资源被分配给角色,角色再分配给管理员用户。
  3. DynamicSecurityService 在启动时加载所有资源及其访问规则。
  4. DynamicSecurityFilter 拦截API请求,并检查当前用户是否有权访问请求的URL。

来源

4. 客户认证与授权

portal模块实现了一个简化的客户认证系统,重点关注会员注册和登录。

4.1 会员认证操作

操作API 端点方法描述实现
注册/sso/registerPOST注册新会员UmsMemberController.register()
登录/sso/loginPOST使用用户名/密码登录UmsMemberController.login()
获取认证码/sso/getAuthCodeGET获取手机验证码UmsMemberController.getAuthCode()
更新密码/sso/updatePasswordPOST更新会员密码UmsMemberController.updatePassword()
获取信息/sso/infoGET获取当前会员信息UmsMemberController.info()
刷新令牌/sso/refreshTokenGET刷新JWT令牌UmsMemberController.refreshToken()

来源

4.2 客户授权模型

客户授权模型比管理员模型更简单。

  1. 所有客户都拥有相同的基本权限(由固定权限“TEST”表示)。
  2. 没有基于动态资源的授权。
  3. 侧重于认证而非细粒度授权。

来源

5. 安全实现细节

5.1 JWT配置

JWT(JSON Web Token)用于无状态认证。系统通过JwtTokenUtil 类生成和验证令牌。

关键JWT配置:

  • 令牌过期时间:在application properties中配置。
  • 密钥:用于签名令牌。
  • 令牌头名称:默认为“Authorization”。
  • 令牌前缀:默认为“Bearer”。

5.2 密码安全

密码安全实现采用:

  • BCrypt密码编码:所有密码均使用BCrypt算法进行哈希。
  • 登录时的密码验证。
  • 安全的密码更新流程。

来源

5.3 忽略的URL

安全配置允许某些URL绕过认证。

  1. 名为IgnoreUrlsConfig的组件从application properties加载URL模式列表。
  2. 这些URL被配置为无需认证即可访问。
  3. 常见的忽略URL包括:
    • 登录端点。
    • 注册端点。
    • 公共资源。

来源

6. 安全缓存

管理员和客户服务均实现了缓存以提高性能。

  1. 用户信息在首次检索后会被缓存。
  2. 管理员资源列表会被缓存,以减少数据库查询。
  3. 客户认证码在注册期间会被缓存。

来源

7. 安全过滤器链

安全过滤器链按以下顺序配置以处理请求:

  1. JWT认证过滤器 - 提取并验证JWT令牌。
  2. 动态安全过滤器(仅限管理员) - 检查资源权限。
  3. 标准Spring Security过滤器。

过滤器链被配置为无状态(无会话),并且禁用CSRF防护以支持REST API架构。

来源

总结

Mall电商系统实现了一个全面的安全系统,为管理员和客户用户提供了独立但架构相似的认证机制。管理员模块提供了复杂的基于角色的访问控制系统和动态资源授权,而客户模块则侧重于带有简化权限的基本认证。两个系统均利用JWT进行无状态认证,并使用Spring Security作为安全基础架构。