30

2 つのファイアウォールがあります。

  1. api(API 呼び出し用)
  2. main(他のすべての場合)

クライアント アプリへのログインは、mainファイアウォール経由で行われます。ただし、apiファイアウォールの下のエンドポイントと対話してデータをフェッチします。ここでの問題は、2 番目のファイアウォールに対する認証のために、ユーザーに 2 回目のログインを強制したくないということです。

単一のログインフォームだけで両方のファイアウォールに対して認証するにはどうすればよいですか?

4

1 に答える 1

60

おそらく、'context' ファイアウォール プロパティを試すことができます。

次のような構成があるとします(おそらくそうです):

security:
    // providers etc ...

    firewall:
        main:
            pattern: # ...
            provider: my_users
            http_basic: ~
        api:
            pattern: # ...
            provider: my_users
            http_basic: ~

この場合、ユーザーのセッションには、「メイン」ファイアウォールに対して認証された後に「_security_main」プロパティが含まれ、「api」ロケーションにアクセスしようとすると、再認証を求めるプロンプトが表示され、「_security_api」が取得されます。セッション プロパティ。

この再プロンプトを防ぐには、同じ認証を共有する各ファイアウォール定義に「コンテキスト」プロパティを追加します。

security:
    # providers etc ...

    firewall:
        main:
            pattern: # ...
            provider: my_users
            http_basic: ~
            context: primary_auth  # new
        api:
            pattern: # ...
            provider: my_users
            http_basic: ~
            context: primary_auth  # new

この場合、「メイン」ファイアウォールでの認証時に、「_security_primary_auth」プロパティがユーザーのセッションに設定されます。'api' firewill 内の後続のリクエストは、'_security_primary_auth' の値を使用して認証ステータスを確立します (したがって、ユーザーは認証されたように見えます)。

もちろん、この認証コンテキストの共有は双方向で機能します (「メイン」または「API」ファイアウォールで最初に認証するかどうか) - 一方向の一時性のみが必要な場合、事態はより複雑になります。

お役に立てれば。

于 2012-02-23T08:59:57.130 に答える