单点登录SSO(single sign on)模式(单点登录+权限认证)

本文介绍了单点登录的三种常见方法,包括过时的session广播、cookie+redis实现以及常用的token实现。重点讨论了JWT(JSON Web Token)的原理和组成,以及JJWT库的使用。此外,还阐述了OAuth2作为授权解决方案的角色,区别于JWT,并解释了其在开放系统间授权和分布式访问问题上的应用。最后提到了SpringSecurity在用户认证和授权中的作用,以及其实现思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、单点登录三种常见方法:

第一种: session广播机制实现(已过时)

                session赋值 = 把登录的session对象,复制给其他模块

                缺点:如果模块多的话,session复制会造成资源浪费,还会因为session复制导致数据重复

第二种:使用cookie + redis 实现(不太常用)

1、介绍

2、怎么设置过期时间?:使用redis 可以设置过期时间

3、概述、

4、原理

 5、使用 

        利用SpringSession来实现session共享   http://t.csdn.cn/5pLqs

第三种:使用token实现(常用)

                  怎么设置过期时间:token可以设置过期时间

二、JWT

 token是什么?按照一定规则生成的字符串,字符串可以包含用户信息。

 什么是JWT? jwt就是token的一种官方规则

                        一种约定好生成字符串的规则

                        jwt就是生成字符串的一种实现

 

 JWT的组成?

头部:主要设置一些规范信息,签名部分的编码格式就在头部中声明。
载荷:token中存放有效信息的部分,比如用户名,用户角色,过期时间等,但是不要放密码会泄露!
签名:将头部与载荷分别采用base64编码后,用“.”相连,再加入盐,最后使用头部声明的编码类型进行编码,就得到了签名。

(头部声明编码)【 [头部(base64) + "." + 荷载(base64)] , 盐(秘钥)】 = > 签名

什么是jjwt?

JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJW很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。

三、登陆流程

 四、OAuth2(解决方案)

例如:微信登录、QQ登录、Gitee等社交登录,利用的就是OAuth

1、OAuth2 和 jwt 的区分? 

        OAuth2 是针对特定问题的一种方案,比如去北京,去北京是一种方案,而jwt是怎么去的,比如乘坐火车。

2、OAuth2 是什么?     

        OAuth2是针对特定问题一种解决方案。

3、OAuth2 主要可以解决什么问题? 

(1)开放系统间授权

 打印照片的权限:百度网盘 访问 打印照片 的权限

原理分析:

 三种常见的授权方式:

        方式一:用户名密码复制

                    (Lucy把百度网盘的用户名和密码给打印照片服务)

        方式二:通用开发者key

                     (百度网盘和打印照片开发一种万能钥匙,用于二者的访问)

        方式三:办法令牌(在方式二上进一步的完善)

                    (百度网盘颁发一种令牌,用于访问百度网盘)

(2)分布式访问问题(单点登录)

五、springsecurity

概念:

        Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
(2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

        Spring Security其实就是用filter,多请求的路径进行过滤。
(1)如果是基于Session,那么Spring-security会对cookie里的sessionid进行解析,找到服务器存储的sesion信息,然后判断当前用户是否符合请求的要求。
(2)如果是token,则是解析出token,然后将当前请求加入到Spring-security管理的权限信息中去

认证与授权实现思路

        如果系统的模块众多,每个模块都需要就行授权与认证,所以我们选择基于token的形式进行授权与认证,用户根据用户名密码认证成功,然后获取当前用户角色的一系列权限值,并以用户名为key,权限列表为value的形式存入redis缓存中,根据用户名相关信息生成token返回,浏览器将token记录到cookie中,每次调用api接口都默认将token携带到header请求头中,Spring-security解析header头获取token信息,解析token获取当前用户名,根据用户名就可以从redis中获取权限列表,这样Spring-security就能够判断当前请求是否有权限访问。

代码的执行流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值