# lee-auth登陆认证code模版 **Repository Path**: lhn-code/lee-auth ## Basic Information - **Project Name**: lee-auth登陆认证code模版 - **Description**: lee-auth web登陆认证code模板,基于long short Token设计,兼顾性能和安全,分布式高可用. - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 1 - **Created**: 2021-08-08 - **Last Updated**: 2025-02-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # lee-auth登陆认证code模版 #### 介绍 lee-auth web登陆认证code模板,基于long short Token设计,兼顾性能和安全。 #### 软件架构 在当前常见web服务中,登陆鉴权是一个通用问题,作为系统在逻辑安全层面的入口,往往不受重视,亦或者在实现上过于笨重/简陋。 本人从事多年web开发,并且在使用security,shiro等安全库后,自行总结一套轻量级高可用分布式,支持单点登陆,多端登陆,易于扩展和定制, 并且对传统token,JWT方案做整合,设计长短token鉴权方案,使系统在安全性和性能上做出折中,某种层度上解决JWT失效前无法登出隐患, 并且此设计方案也能提供用户活跃数据埋点,不登出刷新用户权限等额外附赠功能。此模版仅仅以java做示例,任何语言的web登陆系统都能以类似 方式实现一套轻量级登陆鉴权方案。对于做web登陆认证的新人来说,可以做到铺平道路的作用。 #### 安装教程 clone到本地即可启动,需要java11和maven环境,同时需要配置mysql和redis。 #### 常见认证方式 1.使用**Token**,由服务端签发,并将用户信息存储在redis中,客户端每次请求都带上进行验证 ![输入图片说明](https://oscimg.oschina.net/oscnet/up-21e9681ca8e2331079f82494d0500890c3f.png "在这里输入图片标题") **优点** : - 对多端共享支持友好 - 实现方式相对简单 - 安全性高,控制灵敏性高 - 可以即时登出 **缺点** : - 服务端需要维持会话状态 - 用于维护状态信息的缓存压力很大 - 分布式环境下可用性不高,缓存集群成本较高 - 如需支持单点登录扩展,扩展复杂且运维困难 2.使用**JWT**,由服务端签发且不保存会话状态,客户端每次请求都需要验证合法性 ![输入图片说明](https://oscimg.oschina.net/oscnet/up-a176fb7329bceee44c405091cbe062e0b6e.png "在这里输入图片标题") **优点** : - 对多端共享支持友好 - 原生支持单点登录 - 服务端无会话状态,维护成本低 - 无须缓存支持,减少系统io损耗 - 可携带载荷数据,扩展性较高 **缺点** : - 服务端登出功能难以实现 - 安全性较低,控制灵敏度差 - 一旦签发无法撤销,或撤销较复杂 **总结** - 以上两种方案分别有其优缺点,一般来说,在小型系统中,使用第一种方案,是比较不错的, 并且可以即时登出,服务端具备较大主动权,是一种符合需求的设计。 但是在中大型分布式系统中,第一种设计方案,却带来高昂的维护成本,对缓存也有较大压力, 想要做单点登录扩展更是复杂。这时候如果单纯替换为JWT,虽然解决了缓存问题,分布式可用问题, 单点登陆等问题,但是随之而来的安全问题,服务端无法主动登出问题,也是大部分系统无法接受的。 曾有人使用黑白名单解决JWT不够安全灵敏的缺点,但是一旦使用黑白名单,本质就是退回传统token设计方案。 能不能有一种方案,既能像JWT一样,分布式可用,不对缓存造成巨大访问压力,并且同样支持单点登陆, 这就是长短token方案,使用长token维护登陆状态,使用短token访问系统。此方案的优势是,同时具备token和JWT 的优点,但是却能够将互相的缺点尽量抵消或降低,是一种折中且可用的方案,对于大部分业务场景,都能满足需求, 做到安全和性能的权衡。此代码模板正是对长短token授权方案的一种整理总结。并且同时提供了账号密码登陆, 短信验证码登陆,第三方平台绑定登陆,一键登陆的代码模板,满足了常见需求。 #### 长短Token授权方案 使用[long,short]Token,由认证服务器签发并保存会话状态,业务服务器校验short Token合法性,客户端使用 long Token刷新short Token,认证服务器可使long Token失效,实现服务端延时登出,最长延时时间为short Token 过期时间。 ![输入图片说明](/sequence.png) **优点** : - 对多端共享支持友好 - 原生支持单点登录 - 业务服务端无会话状态,维护成本低 - 业务服务端无须缓存支持,减少系统io损耗 - 可携带载荷数据,扩展性较高 - 安全性较高,控制灵敏性较高 - 可以延时(最长为短token过期时间)登出 (目前已设计一种可以即时登出且不需要缓存方案) - 客户端可以无感知刷新用户权限 - 可以基于客户端刷新操作做数据埋点 **缺点** : - 服务端登出存在一定延迟,延迟时间由短token过期时间控制 (此问题有解决方案,不依赖业务服务器缓存,但有一定难度) - 有一定编程门槛,细节处理较多。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)