身份认证与授权架构设计
系列导读本篇将深入讲解身份认证与授权的架构设计与实现方案。文章目录目录一、认证授权概述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,ListStringroles){ClaimsclaimsJwts.claims().setSubject(username);claims.put(roles,roles);DatenownewDate();DatevaliditynewDate(now.getTime()expiration);returnJwts.builder().setClaims(claims).setIssuedAt(now).setExpiration(validity).signWith(SignatureAlgorithm.HS256,secret).compact();}publicAuthenticationgetAuthentication(Stringtoken){UserDetailsuserDetailsuserDetailsService.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){ListStringpermissionsgetUserPermissions(userId);returnpermissions.stream().anyMatch(p-p.equals(resource:action));}publicListStringgetUserPermissions(StringuserId){// 查询用户权限returnpermissionMapper.selectByUserId(userId);}}四、单点登录4.1 SSO 架构┌─────────────────────────────────────────────────────────────┐ │ SSO 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 应用A ──┐ │ │ │ │ │ 应用B ──┼──► SSO 认证中心 ──► 用户认证 ──► 返回Token │ │ │ │ │ 应用C ──┘ │ │ │ └─────────────────────────────────────────────────────────────┘4.2 CAS 实现// CAS 客户端配置ConfigurationpublicclassCasConfig{BeanpublicFilterRegistrationBeanCasFiltercasFilter(){FilterRegistrationBeanCasFilterregistrationnewFilterRegistrationBean();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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2542907.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!