Oauth2.0的客户端凭证模式(Client Credentials Grant)- Bad request content type. Expecting: application/x-www-

2023-10-31

前情摘要:

        最近在进行项目改造由传统Java Web项目改造为 微服务架构模式的系统,采用VUE+Spring Boot + Oauth2.0 + JWT的主体架构。在改造过程中出现的任何异常在此做一个简单记录,以便正在路上的小伙伴们能有参照方案。

在写好一系列认证授权模块后,测试获取token时控制台报了一个很有意思的异常:

OAuthProblemException{error='invalid_request', description='Bad request content type. Expecting: application/x-www-form-urlencoded', uri='null', state='null', scope='null', redirectUri='null', responseStatus=0, parameters={}}

	at org.apache.oltu.oauth2.common.exception.OAuthProblemException.error(OAuthProblemException.java:59)
	at org.apache.oltu.oauth2.common.utils.OAuthUtils.handleOAuthProblemException(OAuthUtils.java:167)
	at org.apache.oltu.oauth2.common.utils.OAuthUtils.handleBadContentTypeException(OAuthUtils.java:191)
	at org.apache.oltu.oauth2.common.validators.AbstractValidator.validateContentType(AbstractValidator.java:60)
	at org.apache.oltu.oauth2.as.request.OAuthRequest.validate(OAuthRequest.java:62)
	at org.apache.oltu.oauth2.as.request.OAuthRequest.<init>(OAuthRequest.java:52)
	at org.apache.oltu.oauth2.as.request.AbstractOAuthTokenRequest.<init>(AbstractOAuthTokenRequest.java:34)
	at org.apache.oltu.oauth2.as.request.OAuthTokenRequest.<init>(OAuthTokenRequest.java:53)

从异常本身来看就是请求方式错误,但对于经验不足的小伙伴可能就是一头雾水了。这里的请求方式不是指的GET 、POST之类。而是你发起这个请求的模式。本人是在用postman模拟时得到的这个异常,在用postman之前本人已经用正常方式测试了获取Token的方法是正常的,并能成功获得JWT的token信息,只是为了方便后面又用postman来模拟,然后记得到了此异常,一开始也明白具体问题在那里。

解答:其实真正的问题是在于用oauth2.0发起token请求时不是一个普通的request请求。在模拟获取token这个过程中不是直接用postman建一个request。在postman中有独立的Authorization入口,类似于在代码层面我们需要用OAuthClientRequest 通过buildQueryMessage的方式去构建一个request一样,携带的信息是在url中的,并非在header中。

请求token代码实现:

OAuthClientRequest accessTokenRequest = OAuthClientRequest
					.tokenLocation(tokenUrl)
			        .setGrantType(GrantType.CLIENT_CREDENTIALS)
			        .setClientId(clientId)
			        .setClientSecret(clientSecret)
			        .buildQueryMessage();
//去服务端请求access token,并返回响应
OAuthAccessTokenResponse oAuthResponse = oAuthClient.accessToken(accessTokenRequest, OAuth.HttpMethod.POST);
			

在POSTMAN中正确使用方法:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oauth2.0的客户端凭证模式(Client Credentials Grant)- Bad request content type. Expecting: application/x-www- 的相关文章

随机推荐

  • 免费开源iPhone推送消息工具+服务端-Bark

    什么是Bark Bark 是一款纯推送提醒服务 主要用来给自己的 iPhone 发送自定义内容的推送 可以是文字 链接 不提供历史记录功能 阅后即焚 服务端和客户端均开源 实时性和稳定性都非常可靠 支持自定义请求 自行部署服务器 push
  • 关于styleclip的踩坑(1)global direction中的fs3.npy的生成

    随心情填坑 0 背景 因为公司项目有个需求需要用到styleclip 所以就去了解了一下 这项技术就是可以通过clip输入文字 对生成的图片产生一定影响 从而生成符合描述的图片 或者 描述为图像编辑 将一张苦瓜脸变为笑脸 我这边的项目需要将
  • Python列表切片详解([][:][::])

    Python切片是list的一项基本的功能 最近看到了一个程序 里面有这样一句类似的代码 a list 10 不太明白两个冒号的意思就上网百度 发现大多数人写的博客中都没有提到这一个用法 因此自己翻阅 Python核心编程中文版 第二版 教
  • 使用Qt构建osgQt静态库在osg3.6.4中使用(附osgQt源码下载地址)

    osgQt库在osg3 4以后就给取消了 现在一般使用osgQOpenGL库替代 但是网上能搜到的教程里 常见的使用方法 还是以osgQt居多 因此 逼得我只能自己去编译一套osgQt的库文件 有如下几个注意点 首先是下载osgQt的地址
  • GPS经纬度换算成XY坐标

  • git error: src refspec dev does not match any

    背景 我是先在本地垒代码的 因为我是developer角色 所以没有权限把代码直接上传到公司的group下 只能暂时上传到自己的个人group下 所以才有了后面的从已有git资源转移到公司git资源的操作 操作过程 以下是具体的操作步骤 c
  • 计算机网络五层模型之网络层(2)

    接着上一讲 一 网络层 划分子网和构造超网 划分子网 从两级 IP 地址到三级 IP 地址 划分子网的方法是从网络的主机号借用若干位作为子网号 当然主机号也就相应减少了同样的位数 于是两级 IP 地址就变成三级 IP 地址 网络号 子网号和
  • FISCO BCOS(十)——— FISCO BCOS的离线安装

    前提 需要安装jdk1 8 教程传送门 https blog csdn net weixin 46457946 article details 123243513 1 需要在github上下载如下压缩包和脚本 2 将压缩包和脚本上传至终端
  • 解决“ACCESS_MASK不明确”错误

    目录 一 原因 二 解决方法 三 参考链接 一 原因 1 造成 ACCESS MASK不明确 错误的头文件 include dcmtk dcmdata dctk h include dcmtk dcmimgle dcmimage h inc
  • Python学习-Leetcode刷题记5:最长公共前缀

    Python学习 Leetcode刷题记5 最长公共前缀 一 问题 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 说明 所有输入只包含小写字母 a z 二 示例 示例 1 输入 flower flow fl
  • 一、初识java(1.3/1.5/1.6 )

    1 3 第一个JAVA程序 1 建立一个文件路径为英文的空文件夹 新建一个文本文档 txt格式 2 文档内容如下 字体一定要是英文 注意大小写 3 将文件名改为Hellojava java 4 按win r键 输入cmd确定运行 5 进入H
  • 如何使 React 中的 useEffect、useLayoutEffect 只调用一次

    如何使 React 中的 useEffect useLayoutEffect 只调用一次 Hook 是 React 16 8 的新增特性 旨在替代原来 React 中的 Class 组件 React 官方已经对使用 Class 组件采取了负
  • 自定义 CSS 单位的利器

    前文 很多时候我们很想要一个能够自定义 CSS 单位的东西 比如下面这种情况 UI 妹子给的图总是 px 单位的 但是我们做移动端的时候很多时候是想要 rem 的 这时候我们会手动计算从 px 到 rem 假如你计算的是 rem px 10
  • tcpdump 抓包命令及使用

    1 抓取所有接收 发送UDP消息 不确定需求时 最好any端口 tcpdump i any udp s 0 w any pcap 2 当抓包数量太大时建议分段 C 100MB 会产生大约100MB的分段且连续的包 tcpdump i any
  • feign调用接口不稳定解决

    Caused by java net SocketException Software caused connection abort recv failed at java net SocketInputStream socketRead
  • html鼠标划过文字渐变,鼠标滑过字体颜色从左向右渐变

    鼠标滑过字体颜色从左向右渐变 html gt Document 主页 服务 关于我 主页 服务 关于我 主页 主页 服务 关于我 主页
  • leetcode -day31 Subsets I II

    1 Subsets Given a set of distinct integers S return all possible subsets Note Elements in a subset must be in non descen
  • web前端————angular1表格中的复选框、全选、反选、分页小例子

    html页面代码 table class table ordertable label table thead tr th style width 10 th tr thead table
  • Hugging Face学习

    huggingface学习 了解 案列 基础 中文文本分类任务 中文文本填空 中文关系推断 了解 Huggingface官网 link Huggingface是一个开源社区 它提供给了先进的NLP模型 数据集以及其他的工具 数据集 数据集的
  • Oauth2.0的客户端凭证模式(Client Credentials Grant)- Bad request content type. Expecting: application/x-www-

    前情摘要 最近在进行项目改造由传统Java Web项目改造为 微服务架构模式的系统 采用VUE Spring Boot Oauth2 0 JWT的主体架构 在改造过程中出现的任何异常在此做一个简单记录 以便正在路上的小伙伴们能有参照方案 在