2012-01-07 19 views
3

scribeはアクセストークンでrefresh_tokenを抽出していません。スクライブはoauth 2.0で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); 
} 

これは問題を引き起こします。アクセストークンは、将来満了する可能性があります。私はすべてのログイン予行で保存されたリフレッシュトークンによってアクセストークンをリフレッシュする必要がありますが、それを直接取得する方法はありません。

私は筆記用具を改良する予定でしたが、この機能を追加するのは難しいことではありませんが、誰でも既にこれを行っていますか?

答えて

6

あなたの言うことは本当です。スクライブでは、あなたのアクセストークンには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

あなたはまた、スクライブがのOAuth2をしなかった場合、私は」ことに注意してください...のclient_idとclient_secretに合格する必要がありますdはちょうどoauth-signpostを使用します:-) – ejain

+1

この標識? https://github.com/mttkay/signpost最後のコミットは1年以上前のものですが、それでもLinkedIn APIでは動作しません。それで幸運。 –

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(); 
関連する問題