【问题标题】:Access Token Response: tokenType cannot be null访问令牌响应:tokenType 不能为空
【发布时间】:2020-02-26 00:02:27
【问题描述】:

我正在升级我的服务并使用 oAuth2 实现 Web 客户端,但出现异常是“tokenType cannot be null”,请您帮我解决这个问题。

例外: 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

【问题讨论】:

    标签: java spring spring-webflux spring-webclient


    【解决方案1】:

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

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

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

    5.1。成功响应

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

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

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

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

    【讨论】:

      【解决方案2】:

      最终解决了这个问题,客户端缺少令牌 json 响应中的一个字段,即 tokenType。实际上 tokenType 也应该包含在 token 响应中,在我的例子中 tokenType 是 Bearer。

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

      【讨论】:

        猜你喜欢
        • 2020-09-09
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 2016-09-08
        • 2012-08-21
        • 2012-12-02
        • 2023-04-04
        • 2018-07-13
        相关资源
        最近更新 更多