访问令牌响应:tokenType不能为null

时间:2019-10-30 16:10:52

标签: java spring spring-webflux spring-webclient

我正在升级我的服务并使用oAuth2实现webclient,但我收到的例外是“ tokenType不能为null”,请您帮我解决这个问题。

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

2 个答案:

答案 0 :(得分:2)

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

这是一个众所周知的问题,因为该规范要求在访问令牌访问uri时,对客户端的响应中必须包含一个令牌类型(在我们的情况下为BEARER),如果不是,Spring安全性oauth不会影响默认值如果存在此参数标记类型,则可以在上面的链接中解决。

OAuth规范指出: https://tools.ietf.org/html/rfc6749#section-5.1

5.1。成功回应

授权服务器发出访问令牌和可选的 刷新令牌,并通过添加以下内容来构建响应 HTTP响应的实体主体的参数,并带有200(确定) 状态码:

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

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

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

答案 1 :(得分:0)

最终弄清了问题,客户端缺少令牌json响应中的字段之一,即tokenType。实际上,tokenType也应包含在令牌响应中,在我的情况下,tokenType为承载。

{     “ access_token”:“ ************”,     “ token_type”:“承载者”,     “ expires_in”:1800,     “ scope”:“读” }