2

Webで構成の解決策を探しましたが、ニーズを満たすものが見つかりません。これまでのところ、私はこれに丸3日間取り組んできましたが、正しく機能させることができません。理解できなかったことがいくつかあると確信しています。

私はブランチ2.1でsymfonyアプリケーションを開発しています。

これを短くする。認証に使用したいWebサービスがあります。

これが私が実装したいフローです:

  1. ユーザーが資格情報を送信する
  2. これらの資格情報(必要なユーザー名とパスワード)は私のWebサービスに送信されます
  3. ユーザー名/パスワードが正しい場合、Webサービスは、ユーザー名、ロール、およびパスワード以外のいくつかのものを含む配列を提供します。(クレデンシャルが正しくない場合、1つのフィールドを持つ配列が返されます)
  4. Webサービスが「大きな」配列を提供するとすぐに、ユーザーが認証されたと見なされるようにします。
  5. 返されたロールの機能として、Symfonyセキュリティコンポーネントが対応する認証をユーザーに与えるようにしたい。
  6. 閲覧したページごとにWebサービスを呼び出さないようにしたいと思います。

Symfonyを使用してこれを作成できるかどうかはわかりません。確かに、このワークフローはより安全ではないようですが、このWebサービスを使用する別の方法はわかりません。

最後に、認証はリモートサービスで行われるため、UserProviderは必要ありません。しかし、明らかに、Symfonyコンポーネントにはユーザープロバイダーが必要です(タイプは関係ありません)。

よろしくお願いします

編集:簡単にするために、UserProviderクラス(UserProviderInterfaceを実装する)のloadUserByUsername()関数で変数$ username以外のものを渡すことは可能ですか?ユーザーオブジェクトを取得するには、ユーザー名に加えてユーザーパスを取得する必要があります。

4

1 に答える 1

3

AuthenticationProviderは通常、UserProvider.loadUserByUsernameを呼び出します。あなたの場合、それを呼び出す必要はありません。認証メソッドは、ユーザーの作成とトークンの受け渡しを処理できます。

認証されたトークンは、最終的にセッションで終了します。

問題は、デフォルトでは、次のリクエストが着信したときに、システムがセッションからトークン/ユーザーを取得し、UserProvider.refreshUser($ user)を呼び出すことです。これもデフォルトで、ユーザーにloadUserByUsernameを再読み込みします。

したがって、独自のユーザープロバイダーを作成し、refreshUserに同じユーザーを返すようにする必要があります。インターフェイスを満たすためだけにloadUserByUsernameが必要になりますが、決して呼び出さないでください。

Webサービスからユーザーを定期的に更新する場合は、独自のリスナーを追加して、セッションからトークンをロードし、デフォルトの動作をオーバーライドする必要があります。

于 2013-03-07T17:22:06.657 に答える