我发现scribe无法在访问令牌中提取refresh_token
。
OAuth 1.0提取器包含:
Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string");
String token = extract(response, TOKEN_REGEX);
String secret = extract(response, SECRET_REGEX);
return new Token(token, secret, response);
其中包含令牌密钥。
但是在OAuth2.0中,没有令牌秘密,而是refresh_token
。 Scribe完全忽略它:
Preconditions.checkEmptyString(response, "Cannot extract a token from a null or empty String");
Matcher matcher = accessTokenPattern.matcher(response);
if(matcher.find())
{
return new Token(matcher.group(1), "", response);
}
else
{
throw new OAuthException("Cannot extract an acces token. Response was: " + response);
}
这会导致问题。访问令牌可能在将来到期。我必须在每个登录pregress中通过保存的刷新令牌刷新访问令牌,但是没有办法直接获取它。
我计划改进抄写员添加此功能(这并不困难)......但有人已经这样做了吗?
答案 0 :(得分:6)
你说的是真的。 Scribe不会为您提供访问令牌的refresh
方法。 Scribe旨在使OAuth签名变得容易。 OAuth2.0非常简单,如果每个人都在使用OAuth2,那么抄写员就没有任何目的(它在1.0a流程上很有用)。
无论如何,你可以像这样轻松完成刷新步骤:
OAuthRequest request = new OAuthRequest(Verb.POST, "http://server.example.com/token");
request.addBodyParameter("grant_type", "refresh_token");
request.addBodyParameter("refresh_token", accessToken.getToken()); // were accessToken is the Token object you want to refresh.
request.send();
希望有所帮助!
答案 1 :(得分:2)
您可以使用以下代码(例如谷歌提供商)
来实现OAuthRequest request = new OAuthRequest(Verb.POST,"https://accounts.google.com/o/oauth2/token");
request.addBodyParameter("grant_type", "refresh_token");
request.addBodyParameter("refresh_token", accessToken.getToken()); // were accessToken is the Token object you want to refresh.
request.addBodyParameter("client_id", your clientID);
request.addBodyParameter("client_secret", your clientSecret);
Response response = request.send();