Spring Security请求oauth/token接口报401 Unauthorized

这篇具有很好参考价值的文章主要介绍了Spring Security请求oauth/token接口报401 Unauthorized。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

  1. 项目spring-security+oauth2
    版本是5.7.6
    Spring Security请求oauth/token接口报401 Unauthorized
  2. 项目以client的形式请求TokenEndPoint中的/oauth/token,使用Basic认证调用接口,返回token

问题描述

先前是可以登录访问,更新代码之后,现在登录访问报401 Unauthorized
Spring Security请求oauth/token接口报401 Unauthorized
问题的难点是,这个错误信息是项目中请求以http方式请求TokenEndPoint中的/oauth/token返回的,请求并没有到达路径对应接口就返回了,我并没有了解过spring security中过滤器具体有哪些,所以不太好打断点,这导致我浪费很多的时间。

提示:在不了解的情况下,我使用的是笨方法,根据报错信息(Unauthorized), 全局搜索,然后找到线索。
在lib包中的代码,要搜索需要有源码

原因

不废话,原因是走了下边过滤器的这段代码(注意,这是我的项目,走的该Filter,自己的项目还需要结合实际情况来)。

BasicAuthenticationFilter.java

提示:以下代码已经处理过,只保留与本文有关逻辑内容

@Override
	protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		try {
			// 获取用户名
			UsernamePasswordAuthenticationToken authRequest = this.authenticationConverter.convert(request);
			String username = authRequest.getName();
			// 是否需要校验
			if (authenticationIsRequired(username)) { 
			    // 校验,失败抛出异常
				Authentication authResult = this.authenticationManager.authenticate(authRequest);
				// 通过,返回(空函数)
				onSuccessfulAuthentication(request, response, authResult);
			}
		}
		catch (AuthenticationException ex) {
			// 失败,返回(空函数)
			onUnsuccessfulAuthentication(request, response, ex);
			if (this.ignoreFailure) { // 是否忽略认证失败
				chain.doFilter(request, response);
			}
			else {
				// 填充401状态和错误信息
				this.authenticationEntryPoint.commence(request, response, ex);
			}
			return;
		}

		chain.doFilter(request, response);
	}

Authentication authResult = this.authenticationManager.authenticate(authRequest);中会校验报错,然后被catch中的逻辑填充401 和报错信息。
到这里,如果你也遇到类似问题,就通过这个类打个断点试试把。

具体原因

通过跟Authentication authResult = this.authenticationManager.authenticate(authRequest);中的校验代码,发现其通过循环找到对应的Provider去执行校验,如下图
Spring Security请求oauth/token接口报401 Unauthorized

其中provider是DaoAuthenticationProvider,它继承自抽象类AbstractUserDetailsAuthenticationProvider,如下图
Spring Security请求oauth/token接口报401 Unauthorized

AbstractUserDetailsAuthenticationProvider实现了authenticate方法,其中逻辑主要取了用户凭证信息用以比对(这里就不展示了)。
校验部分预留了模板方法,具体校验逻辑则下沉到子类DaoAuthenticationProvider中,类似模板方法模式。

其子类校验逻辑实现如下,通过passwordEncoder密码编码器比对参数中的凭证,与抽象类中获取的凭证信息是否一样。
Spring Security请求oauth/token接口报401 Unauthorized
我出现报错的原因就是这个passwordEncoder的实例类发生了变动,因为pom中依赖版本升级,导致这个密码编码器在高版本中发生了改变,由原来的明文编码器变为了hash编码器。
未升级前使用明文
Spring Security请求oauth/token接口报401 Unauthorized
升级后使用了hash加密
Spring Security请求oauth/token接口报401 Unauthorized文章来源地址https://www.toymoban.com/news/detail-421279.html

到了这里,关于Spring Security请求oauth/token接口报401 Unauthorized的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Spring Security OAuth 2.0

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

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

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

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

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

    2024年02月16日
    浏览(50)
  • 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日
    浏览(42)
  • 微服务安全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日
    浏览(39)
  • Spring Security与OAuth2的完美结合

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

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

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

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

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

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

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

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

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

    2024年02月09日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包