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

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

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

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

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

第二种:使用cookie + redis 实现

          单点登录SSO(single sign on)模式(单点登录+权限认证)_第1张图片

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

第三种:使用token实现

单点登录SSO(single sign on)模式(单点登录+权限认证)_第2张图片

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

二、

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

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

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

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

 单点登录SSO(single sign on)模式(单点登录+权限认证)_第3张图片

 JWT的组成?

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

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

什么是jjwt?

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

三、登陆流程

单点登录SSO(single sign on)模式(单点登录+权限认证)_第4张图片

 四、OAuth2(解决方案)

1、OAuth2 和 jwt 的区分? 

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

2、OAuth2 是什么?     

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

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

(1)开放系统间授权

单点登录SSO(single sign on)模式(单点登录+权限认证)_第5张图片

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

 三种常见的授权方式:

        方式一:用户名密码复制

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

        方式二:通用开发者key

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

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

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

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

单点登录SSO(single sign on)模式(单点登录+权限认证)_第6张图片

五、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就能够判断当前请求是否有权限访问。

单点登录SSO(single sign on)模式(单点登录+权限认证)_第7张图片

代码的执行流程

单点登录SSO(single sign on)模式(单点登录+权限认证)_第8张图片

 

你可能感兴趣的:(springboot,Spring,Security,redis,数据库,database)