2012-01-07 3 views
3

Я обнаружил, что scribe не извлекает refresh_token в токен доступа.scribe не поддерживает refresh_token в oauth 2.0 правильно?

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

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

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

ответ

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

Надежда, что помогает!

+0

Вам также необходимо пройти client_id и client_secret ... Обратите внимание, что если Scribe не делал oauth2, я d просто используйте oauth-signpost :-) – ejain

+1

этот указатель? https://github.com/mttkay/signpost Последняя фиксация - более года назад, и она по-прежнему не работает с Apache LinkedIn. Удачи с этим. –

2

Вы можете сделать это с помощью следующего кода (поставщик 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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^