news 2026/4/22 11:36:48

身份认证与授权架构设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
身份认证与授权架构设计

系列导读:本篇将深入讲解身份认证与授权的架构设计与实现方案。


文章目录

    • 目录
    • 一、认证授权概述
      • 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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 11:35:50

抖音批量下载开源工具:三分钟完成专业级视频采集

抖音批量下载开源工具&#xff1a;三分钟完成专业级视频采集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…

作者头像 李华
网站建设 2026/4/22 11:31:51

解锁AI写专著技能!AI工具一键打造20万字专著,写作从此不难!

撰写学术专著&#xff0c;离不开大量的资料和数据作为支撑&#xff0c;但资料的收集和数据的整合其实是整个写作过程中最繁琐、最耗时的部分。研究者必须全面查找国内外的前沿文献&#xff0c;确保所引用的文献具备权威性和相关性&#xff0c;同时还需深入追溯原始资料&#xf…

作者头像 李华
网站建设 2026/4/22 11:30:49

R语言实战:手把手教你用CIBERSORT分析肿瘤免疫浸润(附完整代码与数据准备)

R语言实战&#xff1a;零基础入门CIBERSORT肿瘤免疫浸润分析全流程指南 肿瘤微环境中的免疫细胞组成对疾病进展和治疗响应具有重要影响。CIBERSORT作为一种基于基因表达数据的反卷积算法&#xff0c;能够从复杂的组织样本中推断出22种免疫细胞亚群的比例组成。对于刚接触生物信…

作者头像 李华
网站建设 2026/4/22 11:27:47

基于YOLOv8的安全帽检测系统:从数据集构建到模型部署实战

1. YOLOv8技术解析与安全帽检测场景适配 YOLOv8作为目标检测领域的新标杆&#xff0c;在工业场景中展现出惊人的适应性。我最近在一个工地安全监控项目中实测了它的性能&#xff0c;相比前代YOLOv5&#xff0c;mAP指标提升了15%以上。这个模型最让我惊喜的是它的C2f模块设计——…

作者头像 李华