Java实现单点登录

单点登录

【1】Token介绍

(1)什么是Token?

Token,也称为"令牌",是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。比如如下形式:39faf62271944fe48c4f1d69be71bc9a

(2)为什么使用Token

传统验证用户身份的方式,大多为基于服务器验证的方式,即cookie+session的方式,由于HTTP协议是无状态的,导致程序需要验证每一次请求,从而辨别客户端的身份。

用户登录成功将其信息存入session中,用户每次请求都会将携带session id的cookie一起发送器服务端,进行校验,随着Web、应用程序、以及移动端的崛起,这种验证方式弊端逐渐显现,尤其是在可扩展性方面。

引发的问题比如用户增多导致内存开销较大、CORS(跨域资源共享)以及CSRF(跨站请求伪造)等。

引入Token验证机制后,请求会发送token而不再是发送cookie能有效够防止CSRF,即使在客户端使用cookie存储token,但cookie也只有存储功能,而不再具备验证功能,因此安全性得到了极大的提高。

而且只要token设计的足够复杂,除非用户泄露,否则几乎没有被破解的可能,加上token是有时效的,在有限的时间加上有限的算力,更是无懈可击,这也类似于加密资产比如比特币钱包对应的私钥,安全性极高。

另外Token可以有效减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

(3)基于token的身份验证流程

1-客户端使用用户名跟密码请求登录

2-服务端收到请求,去验证用户名与密码

3-验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端

4-客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里

5-客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

6-服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据


(4)优点

1-每一次请求都需要携带token ,需要把token 放到HTTP的Header 里

2-基于token 的用户验证是一种服务端无状态的认证方式,服务端不用存放token数据,用解析token的计算时间换取 session的存储空间,从而减轻服务器的压力,减少频繁的查询数据库

3-token 完全由应用管理,所以它可以避开同源策略

(5)Token的使用

在我们做用户权限认证的时候,每次请求都会将Token放在请求头中一起发送到服务器端,服务器端通过拦截器进行拦截校验,如果不存在Token、Token错误或者Token过期,则拒绝请求,有效则返回相应的返回结果。

Token生成示例

使用用户唯一ID + 系统时间 + 随机数 + 过期时间得到用户信息数据,对用户信息数据进行RSA非对称加密/AES对称加密得到一个加密字符串A,将加密字符串A再次进行签名等到一个签名数据。然后将签名数据和加密字符串进行拼接,最后使用base64进行编码,得到最终的token令牌。

(6)JWT

JSON Web Token(JWT)是一个开发标准(RFC 7519),它定义了一种紧凑独立的基于 JSON 对象在各方之间安全地传输信息的方式。这些信息可以被验证和信任,因为它是数字签名的。JWTs 可以使用一个密钥(HMAC算法),或使用 RSA 的公钥/私钥密钥对对信息进行签名。

相关推荐
Tigshop开源商城4 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
坚果派·白晓明5 小时前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
花间相见6 小时前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
小短腿的代码世界6 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
Tigshop开源商城6 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
REDcker6 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
kobesdu8 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
谙弆悕博士8 小时前
快速学C语言——第16章:预处理
c语言·开发语言·chrome·笔记·创业创新·预处理·业界资讯
neo_Ggx238 小时前
Maven 版本管理详解:SNAPSHOT、Release 与 Nexus 仓库的区别和影响
java·maven
matlabgoodboy8 小时前
软件开发定制小程序APP帮代做java代码代编写C语言设计python编程
java·c语言·小程序