писец не поддерживает refresh_token в oauth 2.0, верно? - PullRequest
3 голосов
/ 08 января 2012

Я обнаружил, что писец не извлекает 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.Писец просто игнорирует это:

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);
}

Это вызывает проблему.Токен доступа может истечь в будущем.Я должен обновлять токен доступа сохраненным токеном обновления при каждом входе в систему, но я не могу получить его напрямую.

Я планировал улучшить писца, добавить эту функцию (это не сложно) ... но есть кто-нибудьуже сделали это?

Ответы [ 2 ]

6 голосов
/ 09 января 2012

То, что вы говорите, правда. Писец не дает вам refresh метод для ваших токенов доступа. Писец должен был облегчить подписи 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();

Надеюсь, это поможет!

2 голосов
/ 24 февраля 2014

Вы можете сделать это, используя следующий код (например, провайдер Google)

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();
...