【问题标题】:Incomplete Linkedin OAuth 2.0 access token responseLinkedin OAuth 2.0 访问令牌响应不完整
【发布时间】:2018-07-13 04:52:52
【问题描述】:

我的问题是关于来自 Linkedin api 的 OAuth2 访问令牌响应。当我尝试获取此令牌时,我收到以下响应:

{"access_token":"...","expires_in":...}

但问题是,根据OAuth2 documentation(在 5.1 段落中)应该至少还有一个必需参数 - “token_type”。 所以问题是:是否可以以某种方式对其进行自定义,以便linkedin API 将返回此参数以及访问令牌响应,或者它只是偏离规则并且不会返回此参数?

提前致谢。

【问题讨论】:

    标签: oauth oauth-2.0 linkedin linkedin-api


    【解决方案1】:

    我希望得到 Linkedin 成员的回答,因为他们在他们的网站上声明 stackoverflow 是提出此类问题的合适场所。但由于他们没有回答,我也没有找到任何关于这个问题的相关信息,我相信这只是他们实现 OAuth 2.0 协议的方式。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。根据LinkedIn Docs

      成功的访问令牌请求将返回一个包含以下字段的 JSON 对象:

      • access_token — 用户的访问令牌。根据您对 API 使用条款的同意,此值必须保持安全。
      • expires_in — 从请求到令牌过期前的剩余秒数。目前,所有访问令牌的有效期均为 60 天。

      他们回应

      {"access_token":"...","expires_in":...}
      

      这违反了标准。

      目前我使用的是 Spring Security 5.0.3,为了解决这个问题,我不得不猴子补丁一个类:

      com.nimbusds.oauth2.sdk.token.BearerAccessToken
      

      我不会发布整个课程,只发布重要部分:

      public static BearerAccessToken parse(final JSONObject jsonObject)
              throws ParseException {
      
              // Parse and verify type
              AccessTokenType tokenType;
              try {
                  tokenType = new AccessTokenType(JSONObjectUtils.getString(jsonObject, "token_type"));
              } catch (ParseException ex) {
                  tokenType = AccessTokenType.BEARER;
              }
      
              if (!tokenType.equals(AccessTokenType.BEARER))
                  throw new ParseException("Token type must be \"Bearer\"");
              //...
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-23
        • 1970-01-01
        • 2015-04-01
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 2016-03-15
        • 2019-08-08
        • 1970-01-01
        相关资源
        最近更新 更多