0

Spring Social を構成したいのですが、例には実際には必要のないものがいくつか含まれています。この例を見ると、UserIdSource、UserConnectionRepository、ConnectController、ProviderSignInController、DisconnectController、ReconnectFilter があります。Facebook の Graph API と Twitter のタイムライン操作を使用して、特定のユーザーの最後のツイートを取得したいだけです。Web ページにサインイン サービスがありません。

私の現在の構成は次のとおりです。

@Configuration
public class SocialConfiguration {
    @Autowired
    private Environment env;

    @Bean
    public Facebook facebook() {
        return new FacebookTemplate(env.getProperty("facebook.accessToken"));
    }

    @Bean
    public Twitter twitter() {
        return new TwitterTemplate(env.getProperty("twitter.consumerKey"),
                env.getProperty("twitter.consumerSecret"),
                env.getProperty("twitter.accessToken"),
                env.getProperty("twitter.accessTokenSecret"));
    }
}

これは Twitter ではうまく機能しますが、Facebook のアクセス トークンは一時的なものにすぎません。最初は、ページのアルバムを取得するときにアクセス トークンは必要ありませんでした。しかし、ここでは、アルバム タイプなどの公開アルバムのすべての情報を取得するために 1 つが必要です (原文のまま!)。

サインイン サービスなしで Spring Social を構成する例はありますか?

4

1 に答える 1

2

まず、環境から Facebook のトークンを取得することは、あまり良い考えではありません。目的がユーザーの投稿を取得することである場合、トークンは (より制限されたアプリケーション トークンではなく) ユーザー トークンである必要があります。そのトークンを取得する方法は、Spring Social の ConnectController によって提供される承認フローを通じてユーザーを実行することです。このフローでは、ユーザーは少なくともFacebook にサインインしてアプリケーションを承認する必要があります。彼らがアプリケーションにサインインするかどうかは、ユーザーが誰であるかによって異なります。

(これは Twitter にも当てはまることに注意してください。ただし、Twitter アクセス トークンには有効期限がありません。有効期限がないため、他の方法でアクセス トークンを取得し、構成にハードコードすることができます。実際にはそうではありません。どのように使用することを意図していますが、動作します。)

典型的なフローは、ユーザーがアプリケーションにサインインし (アプリケーションのサインイン ページを介して直接、または Facebook、Twitter などを介して間接的に)、ConnectController フローを介して承認 (およびアクセス トークン) を取得することです。通常のフローでは、FacebookTemplate または TwitterTemplate のインスタンスを直接インスタンス化することはありません。これらは、Connection (ConnectController によって取得された承認を表す) を介してインスタンス化されます。

期限切れのトークンに対処するために、Spring Social は ReconnectFilter も提供します。これは、何らかの理由でアクセス トークンが有効でなくなったことを検出した場合、(ConnectController を介して戻ることによって) 接続を再確立しようとします。これは、ユーザーのブラウザーが Facebook にリダイレクトされて戻ることを意味しますが、承認がまだ有効である限り (トークンの有効期限は切れますが、承認は有効ではありません)、リダイレクトはユーザーに気付かれません。認証がまだ有効な場合、Facebook はユーザーに認証を求めることなくリダイレ​​クトします。

あなたがユーザーである場合、アプリケーションへの認証をバイパスし、常に同じ ID を返す UserIdSource を設定することができます (それが何であれ)。その後、認証はその ID に関連付けられます。ただし、アクセス トークンを取得するには、承認フローを実行する必要があります。

そうは言っても、他の方法でアクセス トークンを取得して構成にハードコードすることは大歓迎ですが、ご指摘のとおり、トークンは期限切れになり、構成は機能しなくなります。

私が指摘できる最良の例は、https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-bootです。確かに、認証 (直接およびプロバイダーベースの両方) をサポートしていますが、ユーザー認証の取得を伴う FacebookTemplate または TwitterTemplate インスタンスを取得するための一般的なフローのデモを行います。Spring Boot の自動構成を利用しているため、Spring Social の構成がほとんど含まれていないことがわかります (実際には、関連する構成はほとんどありません)。より明示的な構成例が必要な場合は、Spring Boot を使用しないhttps://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcaseをご覧ください。

(ただし、IMO では、Spring Boot を使用することをお勧めします。)

于 2015-08-26T14:20:11.927 に答える