当前位置: 首页 > news >正文

spring security auth2.0实现

在这里插入图片描述

OAuth 2.0 的认证/授权流程  jwt只是认证中的一步
4中角色 资源拥有者(resource owner)、客户端(client 第三方)、授权服务器(authorization server)和资源服务器(resource server)。
Authorization Code(授权码模式):OAuth2的授权模式,客户端先将用户导向认证服务器,登录后获取授权码,然后进行授权,最后根据授权码获取访问令牌;(先向服务器认证获取授权码,然后用这个授权码访问获取令牌)
隐式授权模式/简化模式  密码模式(自己开发的代码访问)   客户端凭证模式
当访问令牌过期时 去续期AuthorizationServerConfig 授权服务器 包括了client名称,客户端secret,可授权类型有哪些,令牌过期时间,服务资源的唯一标识resourceIds,scopes范围
ResourceServerConfig 资源服务器  @PreAuthorize("hasAuthority('back:user:role:set')") oauth2的http配置
WebSecurityConfig 在内存中构建身份验证 springsecurity的http配置
UserDetailsService 返回principal主体用户信息UserDetails和passwordEncoder进行验证比较 信息存到上下文!
身份验证的是AuthenticationManager接口,ProviderManager是它的一个默认实现,委托给配置好的AuthenticationProvider(账号+密码/短信/验证码)
拿到了access_token和refresh_token  refresh_token 的存在可以减小长期访问令牌(Access Token)的风险  
refresh_token是需要客户端秘钥 client_secret   过期并且重新获取的access_token中的refresh_token还是之前的 不然过期时间没意义配置客户端信息 client-id client-secret redirect scope authorization-grant-type
配置认证服务器信息 @EnableOAuth2Client和@EnableOAuth2Sso
token-uri为认证服务器颁发token的地址
authorization-uri为用于用户授权的页面地址
user-info-uri为获取用户信息的地址
spring.security.oauth2.client.provider.demo-server.user-info-uri=http://localhost:8081/userinfo  服务器需要提供这个接口获取用户信息
配置WebSecurityConfig 那些请求要去认证如何在不同的请求获取相同认证信息
每次请求都会从session获取信息set到threadlocal中 离开在threadlocal中清除信息// 在此处从会话中获取认证信息
Authentication authentication = MySessionStorage.getStoredAuthentication();
// 将认证信息设置回SecurityContextHolder以便在请求中使用
SecurityContextHolder.getContext().setAuthentication(authentication);如何从子线程获取认证信息!
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-Dspring.security.strategy=MODE_INHERITABLETHREADLOCAL
InheritableThreadLocal  创建后主线程修改信息,子线程是感知不到这个变化的。
void createMap(Thread t, T firstValue) {t.inheritableThreadLocals = new ThreadLocalMap(this, firstValue); //父线程中的inheritableThreadLocals变量
}
http://www.lryc.cn/news/174244.html

相关文章:

  • MySQL(6)LOCK和MVCC
  • 最新IDE流行度最新排名(每月更新)
  • I2C的上拉电阻如何计算?
  • Centos下安装 oracle11g 博客2
  • 记一次逆向某医院挂号软件的经历
  • Canal实现Mysql数据同步至Redis、Elasticsearch
  • Kafka的消息传递保证和一致性
  • Docker 部署 Firefly III 服务
  • 配置OSPFv3基本功能 华为笔记
  • 【AI视野·今日Sound 声学论文速览 第九期】Thu, 21 Sep 2023
  • 数据结构-----堆(完全二叉树)
  • set/multiset容器、map容器
  • Linux系统编程——总结初识Linux(常用命令、特点、常见操作系统)
  • Js使用ffmpeg进行视频剪辑和画面截取
  • Linux基本命令,基础知识
  • 【Android知识笔记】进程通信(三)
  • 云上亚运:所使用的高新技术,你知道吗?
  • 数据结构简述,时间、空间复杂度,学习网站推荐
  • 在线安装qt5.15之后任意版本
  • 【kafka实战】01 3分钟在Linux上安装kafka
  • yum安装mysql8
  • 十五)Stable Diffusion使用教程:另一个线稿出3D例子
  • 2023icpc网络预选赛I. Pa?sWorD(dp)
  • maven本地安装jar包
  • QT中的inherits
  • 全国职业技能大赛云计算--高职组赛题卷①(容器云)
  • 基于springboot+vue的入校申报审批系统
  • 安卓逆向 - EdXposed LSPosed VirtualXposed
  • Linux三大搜索指令的区别
  • C++ -- 特殊类设计