1

oauth をサポートするアプリを作成するために scribe を使用しています。Twitterでは問題が見つかりませんでしたが、Facebookを使用すると問題が発生します...

これは twitter oauth で動作するコードです

OAuthService s = /* ... Facebook oauth init ... */
final Token requestToken = s.getRequestToken();
final String authURL = s.getAuthorizationUrl(requestToken);

2行目にエラーが表示されます:

12-20 10:01:31.475: E/AndroidRuntime(5405): java.lang.UnsupportedOperationException: Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there
12-20 10:01:31.475: E/AndroidRuntime(5405):     at org.scribe.oauth.OAuth20ServiceImpl.getRequestToken(OAuth20ServiceImpl.java:45)

getAuthorizationUrlを使用する可能性があると書かれていることは知っています...しかし、requestTokenを渡す必要があります...

手伝っていただけませんか?

Scribe と Facebook の例を参考にしてください。

ありがとう!

PS: Windows Live でも同じ問題が発生しました。=(

編集:

Scribe ライブラリのソース コードを調べていて、何かを見つけました

https://github.com/fernandezpablo85/scribe-java/blob/master/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java

ここで、getAuthorizationUrl(...) を使用していないため、null パラメーターを指定して呼び出すことができることがわかります....

Facebookサービスを初期化する方法は次のとおりです。

new ServiceBuilder()
    .provider(FacebookApi.class)
    .apiKey(....)
    .apiSecret(....)
    .scope("email,offline_access")
    .callback("oauth://facebook")
    .build();

これは正しいです?

ありがとう!

4

2 に答える 2

7
private static final Token EMPTY_TOKEN = null;

OAuthService service = new ServiceBuilder()
                           .provider(FacebookApi.class)
                            .apiKey(apiKey)
                            .apiSecret(apiSecret)
                             .callback("http://www.example.com/oauth_callback/")
                              .build();
 String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);

これで、ユーザーをこの URL にリダイレクトし、Facebook からコードを取得するためにユーザー自身を確認させるだけで済みます。

ほぼすべての主要な Oath システムの非常に優れたドキュメントを含む、かなりの量の例があります。

フェイスブックはこちら

Facebook例

すべての主要プロバイダー用 Scribe サンプル ディレクトリ

編集

議論を見た後、私の提案は、Oauth1 と Oauth2 について完全に理解することです。

于 2011-12-20T09:46:17.833 に答える
7

あなたはそれをすべて間違っています。OAuth 2 プロトコルは、OAuth 1 のようなリクエスト トークンを返しません。

Oauth 1 は HTTP POST リクエストを実行し、未承認のリクエスト トークンを返します。次に、承認されていないトークンを承認して、承認されたトークンを受け取る必要があります (これは 2 つの HTTP 呼び出しです)。

一方、Oauth 2 にはリクエスト トークン フローがありません。認証トークンに対して HTTP GET を実行する必要があります(1 つの HTTP 呼び出しのみ)。したがって、Scribe が に電話する必要があると言っているのはなぜですかgetAuthorizedUrl

OAuth 2 を使用して承認されたトークンを取得する方法については、このFacebook の例を参照してください。

于 2011-12-20T09:46:41.263 に答える