spring security auth2.0实现

2023-09-22 13:48:02

在这里插入图片描述

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变量
}
更多推荐

如何利用播放器节省20%点播成本

点播成本节省的点其实涉及诸多部分,例如:CDN、转码、存储等,而利用播放器降本却是很多客户比较陌生的部分。火山引擎基于内部支撑抖音集团相关业务的实践,播放器恰恰是成本优化中最重要和最为依赖的部分。火山引擎的视频团队做了份数据统计,在一个很经典的视频业务中,我们在2022年至2023年大约1年半的时间里,针对这个业务进行

el-calendar日历 简易排班

公司物流部要个简易的排班功能,由主管去设置线路,线路绑定上负责人。然后直接往日历里添加。1、隐藏了自带的切换月份,改用了日期选择器。2、禁用了非本月的点击事件,防止点击自动跳转到其他月份。3、添加了点击多选,批量处理,也有单日排班处理。4、拖拽删除排班,代码如下exportfunctiongetFirstDay(mon

一定要知道的 NOI 大纲(2023年修订版)变化

近日,中国计算机学会(CCF)正式发布了《NOI大纲(2023年修订版)》,明确地给出了竞赛的知识范围。CCF于2021年制定完成并首次发布了NOI大纲,大纲发布后,对竞赛组织、教师教学和选手学习发挥了很好的引导作用。根据NOI大纲制定之初的安排,大纲每两年修订一次。CCF最新发布的NOI大纲(2023年修订版),是N

信创办公–基于WPS的EXCEL最佳实践系列 (限制可录入内容)

信创办公–基于WPS的EXCEL最佳实践系列(限制可录入内容)目录应用背景操作过程1、数据有效性(支出证明单)2、如何完成数据有效性的使用(差旅报销申请表)3、清除数据验证4、利用圈释无效数据,验证已输入数据的有效性。5、灵活性调整数据有效性。应用背景本章内容主要讲解:如何在WPS上利用excel去获取数据,如何通过手

dockerfile用ENTRYPOINT好还是用CMD好

在Dockerfile中使用`ENTRYPOINT`和`CMD`都有其用途和优劣势,具体取决于你的应用和需求。这两个指令的主要区别在于如何处理容器启动时的命令参数。1.`CMD`指令:-`CMD`用于定义容器启动时的默认命令,但它可以在运行容器时被替代。如果在运行容器时提供了命令参数,那么这些参数会覆盖`CMD`中定义

说下 RESTful API 使用的几个方法

在最近的面试中,有问到说是说一下RESTfulAPI的几个方法。这次面试问的问题还是比较多的,但是很多问题都是开放性问题,说心里话很长时间没有遇到这样比较好的沟通式面试了。不少公司,以上来就做题目,这个让人很反感。不过现在做题目的过程中,很多公司也都强调,我们不需要有完整的方案,不能运行也没有关系,主要是看思路吧。小结

C++之mutex、operator()、lambda应用总结(二百三十一)

简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.更多原创,欢迎关注:Android系统攻城狮1.前言本篇目的:理解C+

总结分析 | 基于phpmyadmin的渗透测试

一、什么是phpmyadmin?phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于p

凌恩明星产品eDNA再升级:海洋脊椎动物数据库上线!!

凌恩生物明星产品鱼类eDNA产品再次大升级!海洋脊椎动物数据库个性化定制服务上线!自建海洋脊椎动物个性化数据库,更全面的物种分类,更完善的分析内容!!eDNA宏条形码技术在海洋物种多样性调查研究中的优势明显,相比于传统的捕捞、拖网监测技术,eDNA宏条形码技术灵敏度更高,能够检出更多的海洋脊索物种,并且具有高时效性,在

MySQL缓冲池Buffer Pool

前言​在应用系统中,为加速数据访问,会把高频的数据放在「缓存」(Redis、MongoDB)里,减轻数据库的压力。在操作系统中,为了减少磁盘IO,同时为了快速响应,引入了「缓冲池」(bufferpool)机制。​MySQL作为一个存储系统,为提高性能,减少磁盘IO,同样具有「缓冲池」(bufferpool)机制。介绍​

风靡全国的真人猫抓老鼠是什么?

某音上这个词条2.6亿,小某书上1.2亿。据说已经风靡全国50多个城市了。各大新闻网站和自媒体人争相报道,热度直接拉满!现在的年轻人真会玩!仔细了解过后发现,它火是有内在原因的,现在都市工作后没有可以放松的体育项目,健身房老跑路不说,普通人很难坚持下来,那么多年轻人想要社交破圈。这游戏活动都能解决。社交+娱乐+运动,一

热文推荐