MXY-单点登陆系统

单点登陆系统

多点登录系统
传统的登陆系统 每个站点都实现自己的专用登录模块。个站点需要逐一登录,这样的系统 我们称为多点登录系统
单点登陆系统
多个站点共用一台认证授权服务器,用户在任何一个站点登陆后,可以免登录访问其他所有站点,站点间可以通过该登陆状态直接交互
单点登陆系统解决方案设计
用户登录成功后,会基于JWT技术生成一个token,用户信息可以存储到这个token中.后续用户在访问资源时,对token内容解析,检查登录状态以及权限信息,无须再访问数据库。

服务设计
系统服务提供基础数据(用户、日志信息等)   认证服务完成用户身份校验,密码的比对 资源服务代表一些业务服务(订单、收藏等)

UserDetailsService接口:实际项目中 账号和密码都是从数据库中查询出来的。 如需自定义控制逻辑时,只需实现UserDetailsService接口即可
loadUserByUsername方法:获取用户详细信息的唯一的一个方法,通过用户名称获取用户信息
加密算法:BCryptPasswordEncoder 提供了一种不可逆的加密方式 相对于md5方式会更加安全
认证管理器对象:AuthenticationManager 完成用户信息认证,即判定用户信息的合法性,在基于oauth2协议完成认证时,需要此对象。
适配器
1. WebSecurityConfigurerAdapter 默认情况下spring security的http配置 用于通过会话对用户进行身份验证
2. ResourceServerConfigurerAdapter是默认情况下spring security oauth2的http配置
ObjectMapper类:是Jackson的主要类,它可以帮助我们快速的进行各个类型和Json类型的相互转换
目前登陆操作,也就是用户的认证操作,其实现主要基于spring Security框架,简易流程:
JWT:JSON Web Token是一个开放标准,定义了一种紧凑且独立的方式,用于在各方之间作为JSON对象安全地传输信息。
TokenEnhancer: 实现存储访问令牌之前增强访问令牌的策略。
JwtAccessTokenConverter:TokenEnhancer 的子类,帮助程序在JWT编码的令牌值和OAuth身份验证信息之间进行转换(在两个方向上),同时充当TokenEnhancer授予令牌的时间。
构建令牌生成及配置对象
1.1 借助JWT方式将用户相关信息进行组织和加密,并作为响应令牌(token),从服务端响应到客户端,客户端接收到这个JWT令牌之后,将其保存在客户端,然后携带令牌访问资源服务器,资源服务器获取并解析令牌的合法性,基于解析结果判定是否允许用户访问资源
1.2 JWT令牌构成 :header(签名算法,令牌类型),payload(数据部分),Singing(签名)
1.3 签名:签名可以简单理解为加密,加密会使用header中算法以及我们自己提供的密钥,加密的目的是防止令牌被篡改
Oauth2
Oauth2 是一种认证授权规范,它基于认证和授权定义了一套规则,在这套规则中规定了一套认证授权系统需要哪些对象:
1)系统资源(数据)
2)资源拥有者(用户)
3)管理资源的服务器
4)对用户进行认证和授权的服务器
5)客户端系统(负责提交用户身份信息的系统)
授权服务器配置
使用@EnableAuthorizationServer注册启动并继承AuthorizationServerConfigurerAdpater配置授权服务器
继承后实现三个方法:
1. ClientDetailServiceConfigurer:用来配置客户端详情服务。客户端信息再此进行初始化。 能够使用内存或者JDBC实现客户端详情服务。
2 .AuthorizationServerEndpointsConfigurer:
配置令牌的访问端点(申请令牌的URL)和令牌服务(令牌的生成发放规则)
3. AuthorizationServerSecurityConfigurer:用来配置令牌端点的安全约束
oauth2配置令牌的存储策略

  1. JdbcTokenStore token存储关系型数据库
  2. RedisTokenStore token存储到redis数据库
  3. JwtTokenStore token(用户信息)存到客户端

用户访问资源认证流程
在这里插入图片描述
Spring Security 技术:企业级安全框架,对软件系统中的认证,授权,加密等功能进行封装,配置方面做了简化,分布式架构中的安全控制。
Oauth2规范中四种类型的角色
1)资源有者(User)
2)认证授权服务器(jt-auth)
3)资源服务器(jt-resource)
4)客户端应用(jt-ui)
AOP技术:AOP是一种设计思想,实现的功能就是“锦上添花”,就是在尽量不修改原有目标方法的基础上,添加一些扩展功能。
项目中定义了AOP切面以后,系统启动时,会对有@Aspect注解描述的类进行加载分析,基于切入点的描述为目标类型对象,创建代理对象,并在代理对象内部创建一个执行链,这个执行链中包含拦截器(封装了切入点信息),通知(Around,…),目标对象等,我们请求目标对象资源时,会直接按执行链的顺序对资源进行调用。在这里插入图片描述
JoinPoint对象:封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值