4

私はWebアプリケーションを作成していて、ユーザーがSpring-social-(core / twitter)を使用してTwitter経由でサインインできるように実装しました。

ただし、Twitterの動作はおかしいです。最初の認証/承認後、認証のためにユーザーをTwitterに送信するたびに、Twitterはアプリケーションを再度承認するように求めます。接続されているTwitterプロファイルを調べました。私のアプリはそこにあり、正しく承認されています(私の場合は読み取りアクセス用)。

追加の権限を要求するケースはありません。私のアプリケーションに必要なのは読み取りアクセスだけです(認証ダイアログでこれを確認します)。

OAuth1Operations(によって返される)を使用TwitterConnectionFactoryしてOAuthダンスを実行し、結果の接続をデータベースに保存しています。私のフロントエンドはWicket1.5で書かれています。

Twitter経由でサインインしたいときに、アプリを何度も再承認するだけでこの動作を回避できますが、これは非常に厄介です。誰かが私がここで欠けているものを知っていますか?

これが私のコードです:

TwitterConnectionFactory connectionFactory = (TwitterConnectionFactory) connectionFactoryLocator.getConnectionFactory(Twitter.class);
String callbackUrl = [...];

if (pageParameters.get("oauth_token").isNull() || pageParameters.get("oauth_verifier").isNull()) {
    MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
    params.add("x_auth_access_type", "read");
    OAuthToken token = connectionFactory.getOAuthOperations().fetchRequestToken(callbackUrl, params);

    String url = connectionFactory.getOAuthOperations().buildAuthorizeUrl(token.getValue(), OAuth1Parameters.NONE);

    getSession().setAttribute("twitter_token", token);
    setResponsePage(new RedirectPage(url));
} else {
    String token = pageParameters.get("oauth_token").toString();
    String verifier = pageParameters.get("oauth_verifier").toString();

    OAuthToken previousToken = (OAuthToken) getSession().getAttribute("twitter_token");

    if (previousToken.getValue().equals(token)) {
        AuthorizedRequestToken authorizedRequestToken = new AuthorizedRequestToken(previousToken, verifier);

        OAuthToken accessToken = connectionFactory.getOAuthOperations().exchangeForAccessToken(authorizedRequestToken, null);
        Connection<Twitter> connection = connectionFactory.createConnection(accessToken);
    }
}
4

1 に答える 1

3

私は解決策を見つけました!また、ここで詳しく説明します:毎回資格情報を要求する単純なTwitterOauth認証

問題は、私がTwitterに毎回自分のアプリを承認するように特に要求したことでした。交換:

String url = connectionFactory.getOAuthOperations().buildAuthorizeUrl(token.getValue(), OAuth1Parameters.NONE);

String url = connectionFactory.getOAuthOperations().buildAuthenticateUrl(token.getValue(), OAuth1Parameters.NONE);

問題を解決します!認証のためにURLを呼び出すと、アプリがまだ承認されていない場合にのみ承認が求められます。

于 2012-06-05T13:59:35.673 に答える