4

我正在升级我的服务并使用 oAuth2 实现 webclient,我得到的异常是“tokenType 不能为空”,请你帮我解决这个问题。

异常:org.springframework.security.oauth2.core.OAuth2AuthorizationException:[invalid_token_response] 尝试检索 OAuth 2.0 访问令牌时发生错误响应:提取类型 [class org.springframework.security.oauth2.core.endpoint 的响应时出错.OAuth2AccessTokenResponse] 和内容类型 [application/json];嵌套异常是 org.springframework.http.converter.HttpMessageNotReadableException:读取 OAuth 2.0 访问令牌响应时出错:tokenType 不能为空;嵌套异常是 java.lang.IllegalArgumentException: tokenType 不能为 null

4

2 回答 2

5

请查看https://github.com/spring-projects/spring-security/issues/5983#issuecomment-430620308

这是众所周知的问题,因为规范要求在访问令牌访问 uri 时在对客户端的响应中存在令牌类型(在我们的例子中为 BEARER),Spring security oauth 在不存在的情况下不会影响默认值参数 tokentype,您可以在上面的链接中解决。

OAuth 规范指出: https ://www.rfc-editor.org/rfc/rfc6749#section-5.1

5.1。成功响应

授权服务器发出访问令牌和可选的刷新令牌,并通过将以下参数添加到具有 200(OK)状态码的 HTTP 响应的实体主体来构造响应:

需要访问令牌。授权服务器颁发的访问令牌。

token_type 必需的。如第 7.1 节所述发行的令牌类型。值不区分大小写。

expires_in 推荐。访问令牌的生命周期(以秒为单位)。例如,值“3600”表示访问令牌将在响应生成后一小时内过期。如果省略,授权服务器应该通过其他方式提供过期时间或记录默认值。

于 2020-04-27T04:37:36.560 回答
0

最终发现了这个问题,客户端缺少令牌 json 响应中的一个字段,即 tokenType。实际上 tokenType 也应该包含在令牌响应中,在我的情况下 tokenType 是不记名的。

{“access_token”:“************”,“token_type”:“承载”,“expires_in”:1800,“范围”:“读取”}

于 2019-12-02T20:09:23.520 回答