首页 > 其他分享 >深入解读 Spring Security 的设备授权码模式:底层运作原理

深入解读 Spring Security 的设备授权码模式:底层运作原理

时间:2024-12-13 13:56:52浏览次数:11  
标签:code Spring 用户 源码 device 授权 Security 底层 设备

1.什么是设备授权码模式

  设备授权码模式是 OAuth 2.1 的一种授权模式,旨在解决设备(即客户端)需要访问某些受限的资源但又无法在设备上直接输入用户凭证的情况,比如智能电视、游戏机、IoT 设备、打印机等。它是一种再Spring Security高版本之后出现的一种新的认证方式。其整体工作流程大体分以下七个步骤:

  1:设备本身(客户端)发起与授权服务器的通信(比如访问受限资源时发起该请求),post请求、地址形如oauth2/device_authorization,其携带的参数为client_id:设备的唯一标志,scope:授权范围(非必填,如果是多个时只能以空格进行拼装),请求返回信息为user_code,device_code,

verification_uri_complete(也可以访问该地址,转发到登录页,登录完成后就直接跳转到授权页面,因为携带了userCode所以减少了一步,没有3过程),verification_uri,expires_in等信息,并通过某种方式将返回的信息展示给用户(比如显示屏),引导用户再另一设备上完成授权过程。如下图:

  2:用户拿到过程1的返回结果后通过智能手机、电脑等具备用户交互能力的设备,访问verification_uri地址,该地止会提示我们进行登录,如下:

  3:输入账户密码点击登录后会跳转到用户码输入界面,即过程1返回的user_code,如下:

  4:输入用户码点击提交后,则会进一步跳转到授权确认页面,勾选授权,点击提交,则显示操作成功,授权意味着将user_code失效:

  5:设备会定期(通常是间隔几秒或几分钟)向授权服务器发送轮询请求,以查询用户是否已经授权。设备会携带之前获取的设备授权码(device_code)和客户端标识符(client_id)等信息,请求格式/oauth2/token

  6:授权服务器接收到设备的轮询请求后,会验证设备授权信息,包括设备授权码和客户端标识符等一旦授权服务器确认用户已授权,且设备的设备授权码有效且userCode无效,授权服务器将颁发访问令牌(Access Token)给设备。

  7:设备收到授权服务器颁发的访问令牌后,就可以使用该访问令牌来访问受保护的资源。

2.设备授权码底层工作原理

  设备授权码底层工作离不开两个重要的核心类:OAuth2DeviceVerificationEndpointFilter和OAuth2DeviceAuthorizationEndpointFilter,其工作流程如下:

  接下来我们就详细看一下这两个关键类的作用与源码。

1.OAuth2DeviceAuthorizationEndpointFilter

  处理设备发起的授权请求:/oauth2/device_authorization,生成user_code,device_code等,具体源码如下:

  在上图中的authenticate方法主要由OAuth2DeviceAuthorizationRequestAuthenticationProvider认证处理器来进行处理,其具体源码如下:

  2.OAuth2DeviceVerificationEndpointFilter

  响应/oauth2/device_verification请求,用户授权后对user_code进行失效处理。其源码如下:

  其authenticate方法的实现离不开OAuth2DeviceAuthorizationConsentAuthenticationProvider认证处理器,具体如下:

  至此整个设备授权码的流程就已经完成。

  如果您希望更深入地学习Spring Security源码,我强烈推荐您访问以下项目链接:https://gitee.com/chengyadong555/spring-security.git 。在这个项目中,您将发现对Spring Security源码的逐行分析,作者不仅提供了丰富的注释,还融入了自己独到的理解和见解。

标签:code,Spring,用户,源码,device,授权,Security,底层,设备
From: https://blog.csdn.net/qq_26733517/article/details/144445889

相关文章

  • 【java毕设 python毕设 大数据毕设】基于springboot的旧物回收管理系统的设计与实现
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • 【java毕设 python毕设】基于springboot的考务管理系统的设计与实现 【附源码+数据库+
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • springboot prometheus 整合
    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><version>1.9.0</version></dependency>application.ymlmanag......
  • SpringBoot3+Vue3+ArcoDesign后台管理系统源码 | 小蚂蚁云
     项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、ArcoDesign、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈......
  • SpringBoot3+Vue3+ArcoDesign | 小蚂蚁云
    项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、ArcoDesign、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈实......
  • SpringBoot3+Vue3+NaiveUI后台搭建详细教程 | 小蚂蚁云
     项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、NaiveUI、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈实现......
  • SpringBoot3+Vue3+NaiveUI搭建后台系统脚手架 | 小蚂蚁云
     项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、NaiveUI、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈实现......
  • Spring Security6 实现数据库自定义验证和jwt校验
    SpringSecurity6数据库自定义验证和jwt校验的简单实现以及个人解读版本springboot3.4.0mybatis-plus3.5.7jjwt0.12.6在使用jjwt的时候需要导入三个依赖分别是jjwt-api,jjwt-impl和jjwt-jackson,导入三个有点麻烦,所以可以直接导入jjwt依赖,这个依赖包含前面三个<depen......
  • springboot毕设 停车场管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,汽车数量急剧增加,停车难问题已成为现代城市交通管理的一大挑战。传统的停车场管理模式大多依赖于人工操作,效率低下且容易出错,无......
  • springboot毕设 企业出纳系统的设计与实现 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今信息化高速发展的时代,企业财务管理作为企业运营的核心环节,其效率与准确性直接关系到企业的竞争力和持续发展能力。传统的出纳管理方式往往依赖......