文章原作者链接地址:https://blog.csdn.net/gangsijay888/article/details/81977796

记下来以便以后查看

1.本文介绍的认证流程范围

本文主要对从用户发起获取token的请求(/oauth/token),到请求结束返回token中间经过的几个关键点进行说明。

2.认证会用到的相关请求

注:所有请求均为post请求。

  • 获取access_token请求(/oauth/token) 
    请求所需参数:client_id、client_secret、grant_type、username、password
<span style="color:#000000"><code><span style="color:#000088">http</span>://localhost/oauth/<span style="color:#000088">token</span>?client_id=demoClientId&client_secret=demoClientSecret&grant_type=password&username=demoUser&password=<span style="color:#006666">50575</span>tyL86xp29O380t1</code></span>

  • 1
  • 检查头肯是否有效请求(/oauth/check_token) 
    请求所需参数:token
<span style="color:#000000"><code><span style="color:#000088">http</span>://localhost/oauth/check_token?<span style="color:#000088">token</span>=f57ce129-<span style="color:#006666">2</span>d4d-<span style="color:#006666">4</span>bd7-<span style="color:#006666">1111</span>-f31ccc69d4d1</code></span>

  • 1
  • 刷新token请求(/oauth/token) 
    请求所需参数:grant_type、refresh_token、client_id、client_secret 
    其中grant_type为固定值:grant_type=refresh_token
<span style="color:#000000"><code>http://localhost/oauth/token?grant_<span style="color:#4f4f4f">type</span>=refresh_token&refresh_token=fbde81ee-f419-<span style="color:#006666">42</span>b1-<span style="color:#006666">1234</span>-<span style="color:#006666">9191</span>f1f95be9&client_id=demoClientId&client_secret=demoClientSecret</code></span>

  • 1

2.认证核心流程

注:文中介绍的认证服务器端token存储在Reids,用户信息存储使用数据库,文中会包含相关的部分代码。

2.1.获取token的主要流程:

加粗内容为每一步的重点,不想细看的可以只看加粗内容:

  1. 用户发起获取token的请求。
  2. 过滤器会验证path是否是认证的请求/oauth/token,如果为false,则直接返回没有后续操作。
  3. 过滤器通过clientId查询生成一个Authentication对象。
  4. 然后会通过username和生成的Authentication对象生成一个UserDetails对象,并检查用户是否存在。
  5. 以上全部通过会进入地址/oauth/token,即TokenEndpoint的postAccessToken方法中。
  6. postAccessToken方法中会验证Scope,然后验证是否是refreshToken请求等。
  7. 之后调用AbstractTokenGranter中的grant方法。
  8. grant方法中调用AbstractUserDetailsAuthenticationProvider的authenticate方法,通过username和Authentication对象来检索用户是否存在。
  9. 然后通过DefaultTokenServices类从tokenStore中获取OAuth2AccessToken对象。
  10. 然后将OAuth2AccessToken对象包装进响应流返回。

2.2.刷新token(refresh token)的流程

刷新token(refresh token)的流程与获取token的流程只有⑨有所区别:

  • 获取token调用的是AbstractTokenGranter中的getAccessToken方法,然后调用tokenStore中的getAccessToken方法获取token。
  • 刷新token调用的是RefreshTokenGranter中的getAccessToken方法,然后使用tokenStore中的refreshAccessToken方法获取token。

2.3.tokenStore的特点

tokenStore通常情况为自定义实现,一般放置在缓存或者数据库中。此处可以利用自定义tokenStore来实现多种需求,如:

  • 同已用户每次获取token,获取到的都是同一个token,只有token失效后才会获取新token。
  • 同一用户每次获取token都生成一个完成周期的token并且保证每次生成的token都能够使用(多点登录)。
  • 同一用户每次获取token都保证只有最后一个token能够使用,之前的token都设为无效(单点token)。

3.获取token的详细流程(代码截图)

3.1.代码截图梳理流程

1.一个比较重要的过滤器 

2.此处是①中的attemptAuthentication方法 

3.此处是②中调用的authenticate方法 

4.此处是③中调用的AbstractUserDetailsAuthenticationProvider类的authenticate方法 

5.此处是④中调用的DaoAuthenticationProvider类的retrieveUser方法 

6.此处为⑤中调用的ClientDetailsUserDetailsService类的loadUserByUsername方法,执行完后接着返回执行④之后的方法 

7.此处为④中调用的DaoAuthenticationProvider类的additionalAuthenticationChecks方法,此处执行完则主要过滤器执行完毕,后续会进入/oauth/token映射的方法。 

8.此处进入/oauth/token映射的TokenEndpoint类的postAccessToken方法 

9.此处为⑧中调用的AbstractTokenGranter类的grant方法 

10.此处为⑨中调用的ResourceOwnerPasswordTokenGranter类中的getOAuth2Authentication方法 

11.此处为⑩中调用的自定义的CustomUserAuthenticationProvider类中的authenticate方法,此处校验用户密码是否正确,此处执行完则返回⑨执行后续方法。 

12.此处为⑨中调用的DefaultTokenServices中的createAccessToken方法 

13.此处为12中调用的RedisTokenStore中的getAccessToken方法等,此处执行完,则一直向上返回到⑧中执行后续方法。 

14.此处为⑧中获取到token后需要包装返回流操作 

转载于:https://www.cnblogs.com/zhuxiner/p/10483486.html

Spring Security Oauth2 认证(获取token/刷新token)流程相关推荐

  1. Spring Security OAuth2认证授权示例

    本文介绍了如何使用Spring Security OAuth2构建一个授权服务器来验证用户身份以提供access_token,并使用这个access_token来从资源服务器请求数据. 1.概述 OA ...

  2. Spring Security Oauth2 认证流程

    1.本文介绍的认证流程范围 本文主要对从用户发起获取token的请求(/oauth/token),到请求结束返回token中间经过的几个关键点进行说明. 2.认证会用到的相关请求 注:所有请求均为po ...

  3. Spring Security OAuth2.0 token生成与刷新机制源码阅读

    一.介绍 Spring Security Oauth2是目前市面上非常流行的实现了OAuth2.0协议的权限框架.本文会介绍其是如何获取token以及刷新token的. 二.AbstractEndPo ...

  4. 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...

  5. Spring Security Oauth2 JWT 实现用户认证授权功能

    Spring Security Oauth2 JWT 一 用户认证授权 1. 需求分析 1.1 用户认证与授权 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份 ...

  6. Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战

    本文源码地址 后端:https://gitee.com/youlaitech/youlai-mall/tree/v2.0.1 前端:https://gitee.com/youlaiorg/mall-a ...

  7. 学成在线-第16天-讲义- Spring Security Oauth2 JWT RSA加解密

    学成在线-第16天-讲义- Spring Security Oauth2 JWT 1 用户认证需求分析 1.1 用户认证与授权 ​ 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进 ...

  8. Re:从零开始的Spring Security Oauth2(二)

    本文开始从源码的层面,讲解一些Spring Security Oauth2的认证流程.本文较长,适合在空余时间段观看.且涉及了较多的源码,非关键性代码以-代替. 准备工作 首先开启debug信息: l ...

  9. 源码分析 - Spring Security OAuth2 生成 token 的执行流程

    说明 本文内容全部基于 Spring Security OAuth2(2.3.5.RELEASE). OAuth2.0 有四种授权模式, 本文会以 密码模式 来举例讲解源码. 阅读前, 需要对 OAu ...

最新文章

  1. python-装饰器实现pv-uv
  2. 基于vue的颜色选择器vue-color-picker
  3. session过期情况下ajax请求不会触发重新登录的问题
  4. DOTA2:IG实力不如Nigma?解说:错了,让门票给他们自己回家训练
  5. 线性代数问卷调查反馈——Find The Determinant III,Takahashi‘s Basics in Education and Learning
  6. mysql的cpu飙升到500_[MySQLCPU]线上飙升800%,load达到12的解决过程
  7. canvas笔记-二次贝塞尔曲线与三次贝塞尔曲线的用法
  8. self-attention的作用,理解
  9. RT thread 设备驱动组件之USART设备
  10. error “Device supports x86, but APK only supports armeabi-v7a”
  11. 单片机脉冲喷吹仪c语言,C51单片机脉冲累加器(C语言程序)
  12. 解决Android Studio不停的Indexing的问题
  13. Routerboard/DR4019S-Qualcomm-IPQ4019-2T2R-Dual-Band-2-4GHz-5GHz-support-OpenWRT-802.11ac-Wave-2.
  14. 大地测量学白塞尔大地主题解算
  15. 百度语音识别API报错KeyError: ‘result‘
  16. 前端框架(混合开发框架)
  17. session fixation漏洞简述
  18. Burpsuite简单代理配置
  19. 遍历文件夹打印所有文件名
  20. layui使用模板渲染数据

热门文章

  1. [Java] 蓝桥杯ALGO-117 算法训练 友好数
  2. 《分布式系统:概念与设计》一2.3.1 体系结构元素
  3. Silevo需征收进口关税?美光伏巨头各执一词
  4. hbase 架构和存储
  5. 2015年第46周五
  6. ECSHOP商城网站建设之自定义调用广告方法(二)
  7. C++编程教程教你如何从零学起(免费高速下载)TXT文档分享
  8. HAProxy+Hive构建高可用数据挖掘集群
  9. C++11 强类型枚举
  10. 【大数据课堂000】今天开课了每天更新一集