2 つのファイアウォールがあります。
api
(API 呼び出し用)main
(他のすべての場合)
クライアント アプリへのログインは、main
ファイアウォール経由で行われます。ただし、api
ファイアウォールの下のエンドポイントと対話してデータをフェッチします。ここでの問題は、2 番目のファイアウォールに対する認証のために、ユーザーに 2 回目のログインを強制したくないということです。
単一のログインフォームだけで両方のファイアウォールに対して認証するにはどうすればよいですか?
2 つのファイアウォールがあります。
api
(API 呼び出し用)main
(他のすべての場合)クライアント アプリへのログインは、main
ファイアウォール経由で行われます。ただし、api
ファイアウォールの下のエンドポイントと対話してデータをフェッチします。ここでの問題は、2 番目のファイアウォールに対する認証のために、ユーザーに 2 回目のログインを強制したくないということです。
単一のログインフォームだけで両方のファイアウォールに対して認証するにはどうすればよいですか?
おそらく、'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」ファイアウォールで最初に認証するかどうか) - 一方向の一時性のみが必要な場合、事態はより複雑になります。
お役に立てれば。