12

Wordnik REST APIと連携する Symfony2 を使用してアプリケーションを作成しています。

現在、Wordnik API は OAuth 機能を提供していないため、API インターフェイスに透過的に渡すユーザー名とパスワードを受け入れる必要があります。

この API 認証を Symfony2 のセキュリティ システムに統合したいのですが、今のところ最適な実装ルートを特定できていません。

パスワードがシステムに保存されていないため、カスタム ユーザー プロバイダーは正しくないと思います。カスタム認証プロバイダーに関するすべての例は、REST APIに対するものではなく、アプリケーションの一部を APIとして保護することに関連しているようです。

FOSUserBundle がこの問題の解決にどの程度役立つかは、私には明らかではありません。

理想的な流れ:

  • ユーザーが資格情報を提供します。
  • 資格情報はサードパーティの REST API に渡されます
  • 資格情報が正しい場合:
    • 対応する「サード パーティ ユーザー」エンティティが存在しない場合は、アプリケーションによって作成されます。
    • ユーザーは、この「サード パーティ ユーザー」エンティティを使用して認証されます。

Symfony2 セキュリティ コンテキスト内でこれを実装する最良の方法は何ですか?

ありがとう!

関連する質問:

4

1 に答える 1

4

http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.htmlで説明されているように、カスタム認証プロバイダーを実装する必要があります。

何が最善の方法かはわかりませんが、始めるのを助けるために: リスナー、トークン、プロバイダー、およびファクトリーを作成します。

リスナーの試行認証メソッドは、ユーザーから提供された資格情報を取得し、その入力で新しいトークンを作成します。メソッドの最後に以下を追加します: return $this->authenticationManager->authenticate($token);

プロバイダは、認証メソッドでこのトークンを使用して API リクエストを送信します。

存在しないユーザーの場合、次の 2 つのオプションがあります。- API 呼び出しの後、認証メソッドでユーザーを作成し、それが既に存在するかどうかを確認した後、私は彼らが行く方法ではないと信じています - httpsのような独自の認証失敗ハンドラーを作成します://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.phpですが、onAuthenticationFailure メソッドの先頭に if ($exception instanceof UsernameNotFoundException && (null ! == $token = $exception->getToken()) && $token instanceof YourWordnikToken) { // そのユーザーをここに作成します }

これは、それがどのように機能するかの基本的な考え方です...私は、hacfi というニックネームで IRC を使用しています。さらに詳しいガイダンスが必要な場合はお知らせください。

于 2013-02-18T23:40:12.270 に答える