浅析spring-security-oauth2-authorization-server

这篇具有很好参考价值的文章主要介绍了浅析spring-security-oauth2-authorization-server。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在Spring中, Shirospring-security是比较常用的安全框架解决方案, shiro在中小型项目中使用通常来说既简单, 也能达到常规的需求, 如果项目较为复杂, 建议spring-security

        Spring Security OAuth2.0已经停止维护, oauth2-authorization-server是目前官方推荐的安全框架方案, 所以值得学习

        本文以密码登陆认证流程为基础, 简要剖析登陆认证执行流程


软件版本 

        spring-security-oauth2-authorization-server  0.4.2

   spring-boot 2.7.11 (也是spring-cloud-alibaba-2021.0.5.0 对应的boot版本)

        不管是 Shiro还是本文oauth2-authorization-server,  及大部分安全框架都是基于Filter拦截请求实现的, 所以我们直接找到对应的过滤器

        我们以密码登陆为例http://localhost:8080/oauth2/token,  关注红色部分参数即可

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

该请求会被框架的

org.springframework.security.oauth2.server.authorization.web.OAuth2ClientAuthenticationFilter

过滤器拦截到, 代码如下

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

在图标记1处我们可以看到, 框架默认填充了4个converter, 来接收我们的请求参数, 在我们的登陆请求中我们的请求会在图片标记2处被第二个converter所处理,就是这个ClientSecretBasicAuthenticationConverter

        为什么是第二个converter, 我们可以结合登陆请求参数看ClientSecretBasicAuthenticationConverter源码,我们发现有这一段代码

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

大意就是如果请求头包含 Authorization 就执行下面逻辑, 刚好我们的请求是包含了这个header,所以会使用这个converter生成一个未认证的认证对象

        回到OAuth2ClientAuthenticationFilter类的标记3处, 经过converter生成的认证对象会被authenticationManager调用authenticate进行认证, 我们看authenticationManager的实现类ProviderManager中的authenticate方法

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

我们可以非常清楚的看到,  ProviderManager会尝试使用所有的provider进行处理, 我们也可以看到 provider的实现类也是非常多的

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

 最终采用那个provider取决于provider是否能支持前面converter生成的认证对象. 注意可出现多个provider支持同一种类型的认证对象"情况

        还是以我们的请求参数被ClientSecretBasicAuthenticationConverter转化生成的未认证的认证对象OAuth2ClientAuthenticationToken 为例, 这个认证对象会在ClientSecretAuthenticationProvider进行认证处理,

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

可以看到ClientSecretAuthenticationProvider是支持OAuth2ClientAuthenticationToken 类型的认证对象的, 因此会使用ClientSecretAuthenticationProvider提供的authenticate认证方法 在ClientSecretAuthenticationProvider的认证方法内, 我们可以看到完整的认证流程

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

 其中registeredClientRepository是我们需要关注的, 这个类通常我们需要自定义重写, 方法中它会尝试通过clientId来查找认证对象的实体数据, 我们自定义重写后, 我们就可以关联自己的数据库查询, 如果认证成功, 方法会生成一个认证成功的认证对象

 认证成功后会调用 图2中的标记4

this.authenticationSuccessHandler.onAuthenticationSuccess(request, response, authenticationResult);

方法中内容如下

浅析spring-security-oauth2-authorization-server,spring,java,后端,微服务

 创建一个SecurityContext上下文, 把已认证的认证对象放到这个上下文中, 供后续的使用


我们知道整个认证流程是包含客户端认证+用户认证,  上述认证流程是在进行客户端数据认证,  后续还包括用户认证, 用户认证流程大体类似, OAuth2TokenEndpointFilter 会接收通过上文 OAuth2ClientAuthenticationFilter 客户端认证的请求, 流程都分为3部分,  第一通过converter转化请求数据成未认证的认证对象,  第二步authenticationManager去匹配合适的provider进行具体的认证流程生成已认证的认证对象, 第三步就是通过AuthenticationSuccessHandler来处理最后的结果, 如返回认证登陆生成的token


总结

oauth2-authorization-server已做了很多封装处理,  在使用过程中, 我们主要关注这几个部分

第一, 各种Converter

        或者我们自定义Converter, 如果自定义Converter通常需要自定义认证对象, 自定义Converter和认证对象都可以参考框架提供的, 如我们分析的ClientSecretBasicAuthenticationConverter和对应的认证对象OAuth2ClientAuthenticationToken

第二, 各种Provider

        ProviderManager在认证时会遍历全部Provider, 匹配合适的provider, 如自定义了provider需要重写supports来匹配provider能处理的认证对象, 并重写authenticate进行自定义认证流程

第三, 定义好AuthenticationSuccessHandler, 及时处理认证成功的数据, 响应给请求者AuthenticationSuccessHandler与认证流程采用的是订阅监听模式, 不及时处理可出现后续无效验证

后续, 本文只讲解oauth2-authorization-server认证流程, 授权功能暂未分析, 后续继续文章来源地址https://www.toymoban.com/news/detail-678295.html

到了这里,关于浅析spring-security-oauth2-authorization-server的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Security OAuth 2.0

    1 概念 OAuth 2.0 到底是什么呢?我们先从字面上来分析下。OAuth 2.0 一词中的字母 “O” 是 Open 的简称,表示 “开放” , “Auth” 表示 “授权”,连在一起就表示 “开放授权”。 OAuth 2.0是一种授权框架,提供了一套规范和协议,用于实现授权流程和访问令牌的管理,而非单个

    2024年02月16日
    浏览(37)
  • Spring Security OAuth2详解

    spring security oauth2框架即spring security + OAuth2,spring security上一篇文章已经讲过,接下来讲讲OAuth2,它是行业标准的授权协议,旨在为开发人员提供简单易用的授权流程;OAuth 定义了四种角色: 资源所有者:能够授予对受保护资源的访问权限的实体,当资源所有者是一个人时,

    2024年02月03日
    浏览(30)
  • Spring Security OAuth2.0 - 学习笔记

    OAuth2.0是一个开放标准,允许用户授权第三方应用程序访问他们存储在另外的服务提供者上的信息,而不需要将用户和密码提供给第三方应用或分享数据的所有内容。 1)授权码模式 2)简化模式 3)密码模式 4)客户端模式 普通令牌只是一个随机的字符串,没有特殊的意义,

    2024年02月16日
    浏览(38)
  • Spring Security OAuth2 远程命令执行漏洞

    cd vulhub/spring/CVE-2016-4977/ docker-compose up -d 访问 http://192.168.10.171:8080/oauth/authorize?response_type=${233*233}client_id=acmescope=openidredirect_uri=http://test 用admin:admin登陆 出现以下报错,表示漏洞存在(response_type里面的命令执行了) poc.py #!/usr/bin/env python message = input(‘Enter message to encode:’) p

    2024年02月09日
    浏览(28)
  • Spring Security OAuth Client配置加载源码分析

    相关文章: OAuth2的定义和运行流程 Spring Security OAuth实现Gitee快捷登录 Spring Security OAuth实现GitHub快捷登录 Spring Security的过滤器链机制 这一节我们以前面默认的OAuth2 客户端集成为例,来了解下配置文件的加载,示例见第二、第三节。 假如你没有看过相关视频,或者书,但想要

    2024年02月08日
    浏览(29)
  • 微服务安全Spring Security Oauth2实战

    Spring Authorization Server 是一个框架,它提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。它建立在 Spring Security 之上,为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产品提供了一个安全、轻量级和可定制的基础。说白了,Spring Authorization Server 就是一个**认

    2024年02月03日
    浏览(28)
  • Spring Security与OAuth2的完美结合

    OAuth2是一种流行的授权框架,它允许用户授权第三方应用程序访问他们的资源。Spring Security是一个强大的安全框架,它提供了一系列的安全功能。本文将介绍如何将Spring Security与OAuth2整合,以实现更加安全和可靠的应用程序。 OAuth2的基本概念 OAuth2是一个授权框架,它允许用

    2024年02月05日
    浏览(32)
  • Spring Security实现OAuth2协议及实战

    文章篇幅较长,愿读者耐心看完。如有不足之处,请指正。 一.OAuth2介绍 1.1 OAuth2是什么 怎么用 OAuth2是目前最流行的授权协议,用来授权第三方应用,获取用户数据。 举个例子:快递员想要进入小区,有3种方式。1是业主远程开门,2是业主告诉门禁密码,3是使用令牌(Oaut

    2024年02月08日
    浏览(29)
  • spring-security -oauth2 整合 JWT

    在这个基础上,进行整合。 spring security oauth2学习 -- 快速入门_本郡主是喵的博客-CSDN博客 先把  reids,common-pools  等依赖删掉。 删掉redis的下相关配置 1.1 导入依赖 1.2 核心代码 创建 jwtTokenConfig.java 在 AuthenticationServer.java 里面新增这些。  运行,启动!  复制这个token去官网解析

    2024年02月09日
    浏览(42)
  • Spring Security对接OIDC(OAuth2)外部认证

    前后端分离项目对接OIDC(OAuth2)外部认证,认证服务器可以使用Keycloak。 后端已有用户管理和权限管理,需要外部认证服务器的用户名和业务系统的用户名一致才可以登录。 后台基于Spring Boot 2.7 + Spring Security 流程: 前台浏览器跳转到  后台地址 + /login/oauth2/authorization/my-oid

    2024年02月21日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包