我的问题是来自Linkedin api的OAuth2访问令牌响应。当我试图获得此令牌时,我收到以下回复:
{"access_token":"...","expires_in":...}
但问题是,根据OAuth2 documentation(在5.1段中),应该至少还有一个必需参数 - &#34; token_type&#34;。 所以问题是:它可能以某种方式自定义,因此linkedin API将返回带有访问令牌响应的参数,或者它只是偏离规则并且不会返回此参数?< / p>
提前致谢。
答案 0 :(得分:1)
我遇到了同样的问题。根据{{3}}:
成功的访问令牌请求将返回包含以下字段的JSON对象:
- access_token - 用户的访问令牌。根据您对API使用条款的同意,此值必须保持安全。
- expires_in - 在请求到期之前,从请求的时间开始剩余的秒数。目前,所有访问令牌都有60天的使用期限。
他们回复
{"access_token":"...","expires_in":...}
违反了标准。
目前我正在使用Spring Security 5.0.3并解决了这个问题,我不得不monkeypatch一个类:
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\"");
//...
}
答案 1 :(得分:0)
我希望从Linkedin成员那里得到答复,因为他们在他们的网站上指出stackoverflow是询问此类问题的合适场所。但是由于他们没有答案,而且我也没有找到有关此问题的任何相关信息,所以我相信这只是他们实现OAuth 2.0协议的方式。