系列导读:本篇将深入讲解身份认证与授权的架构设计与实现方案。
文章目录
- 目录
- 一、认证授权概述
- 1.1 核心概念
- 1.2 认证方式对比
- 二、认证方案
- 2.1 JWT 认证
- 2.2 OAuth2 认证流程
- 三、授权模型
- 3.1 RBAC 模型
- 3.2 权限设计
- 3.3 权限校验
- 四、单点登录
- 4.1 SSO 架构
- 4.2 CAS 实现
- 总结
目录
- 一、认证授权概述
- 二、认证方案
- 三、授权模型
- 四、单点登录
- 总结
一、认证授权概述
1.1 核心概念
认证 (Authentication):确认你是谁 授权 (Authorization):确认你能做什么 ┌─────────────────────────────────────────────────────────────┐ │ 认证授权流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 用户 ──► 身份认证 ──► 获取Token ──► 访问资源 ──► 权限校验 │ │ │ └─────────────────────────────────────────────────────────────┘1.2 认证方式对比
| 方式 | 说明 | 安全性 |
|---|---|---|
| 用户名密码 | 传统方式 | 中 |
| 短信验证码 | 动态密码 | 中 |
| OAuth2 | 第三方授权 | 高 |
| 生物识别 | 指纹/人脸 | 高 |
| 多因素认证 | MFA | 最高 |
二、认证方案
2.1 JWT 认证
// JWT 工具类@ComponentpublicclassJwtTokenProvider{@Value("${jwt.secret}")privateStringsecret;@Value("${jwt.expiration}")privatelongexpiration;publicStringcreateToken(Stringusername,List<String>roles){Claimsclaims=Jwts.claims().setSubject(username);claims.put("roles",roles);Datenow=newDate();Datevalidity=newDate(now.getTime()+expiration);returnJwts.builder().setClaims(claims).setIssuedAt(now).setExpiration(validity).signWith(SignatureAlgorithm.HS256,secret).compact();}publicAuthenticationgetAuthentication(Stringtoken){UserDetailsuserDetails=userDetailsService.loadUserByUsername(getUsername(token));returnnewUsernamePasswordAuthenticationToken(userDetails,"",userDetails.getAuthorities());}publicbooleanvalidateToken(Stringtoken){try{Jwts.parser().setSigningKey(secret).parseClaimsJws(token);returntrue;}catch(JwtException|IllegalArgumentExceptione){returnfalse;}}}2.2 OAuth2 认证流程
┌─────────┐ ┌─────────┐ │ 用户 │ │ 第三方 │ └────┬────┘ └────┬────┘ │ │ │ 1. 请求授权 │ ├───────────────────────────────────────►│ │ │ │ 2. 用户同意授权 │ │◄───────────────────────────────────────┤ │ │ │ 3. 返回授权码 │ │◄───────────────────────────────────────┤ │ │ │ 4. 用授权码换取Token │ ├───────────────────────────────────────►│ │ │ │ 5. 返回Access Token │ │◄───────────────────────────────────────┤ │ │ │ 6. 用Token访问资源 │ ├───────────────────────────────────────►│ │ │ │ 7. 返回资源 │ │◄───────────────────────────────────────┤三、授权模型
3.1 RBAC 模型
用户 ──► 角色 ──► 权限 ──► 资源 ┌─────────────────────────────────────────────────────────────┐ │ RBAC 数据模型 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 用户表 (user) │ │ 角色表 (role) │ │ 权限表 (permission) │ │ 用户角色关联表 (user_role) │ │ 角色权限关联表 (role_permission) │ │ │ └─────────────────────────────────────────────────────────────┘3.2 权限设计
-- 用户表CREATETABLEuser(idBIGINTPRIMARYKEY,usernameVARCHAR(50)NOTNULL,passwordVARCHAR(100)NOTNULL);-- 角色表CREATETABLErole(idBIGINTPRIMARYKEY,nameVARCHAR(50)NOTNULL,codeVARCHAR(50)NOTNULL);-- 权限表CREATETABLEpermission(idBIGINTPRIMARYKEY,nameVARCHAR(50)NOTNULL,resourceVARCHAR(100)NOTNULL,actionVARCHAR(20)NOTNULL);-- 用户角色关联CREATETABLEuser_role(user_idBIGINT,role_idBIGINT,PRIMARYKEY(user_id,role_id));-- 角色权限关联CREATETABLErole_permission(role_idBIGINT,permission_idBIGINT,PRIMARYKEY(role_id,permission_id));3.3 权限校验
// 权限校验服务@ServicepublicclassPermissionService{publicbooleanhasPermission(StringuserId,Stringresource,Stringaction){List<String>permissions=getUserPermissions(userId);returnpermissions.stream().anyMatch(p->p.equals(resource+":"+action));}publicList<String>getUserPermissions(StringuserId){// 查询用户权限returnpermissionMapper.selectByUserId(userId);}}四、单点登录
4.1 SSO 架构
┌─────────────────────────────────────────────────────────────┐ │ SSO 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 应用A ──┐ │ │ │ │ │ 应用B ──┼──► SSO 认证中心 ──► 用户认证 ──► 返回Token │ │ │ │ │ 应用C ──┘ │ │ │ └─────────────────────────────────────────────────────────────┘4.2 CAS 实现
// CAS 客户端配置@ConfigurationpublicclassCasConfig{@BeanpublicFilterRegistrationBean<CasFilter>casFilter(){FilterRegistrationBean<CasFilter>registration=newFilterRegistrationBean<>();registration.setFilter(newCasFilter());registration.addUrlPatterns("/*");registration.addInitParameter("casServerLoginUrl","https://sso.example.com/login");registration.addInitParameter("serverName","https://app.example.com");returnregistration;}}总结
✅认证授权概述:核心概念、认证方式
✅认证方案:JWT、OAuth2
✅授权模型:RBAC、权限设计
✅单点登录:SSO 架构、CAS 实现
下篇预告:数据安全与加密方案
作者:刘~浪地球
系列:安全架构(三)
更新时间:2026-04-22