身份驗證多個Symfony2的防火牆,我有兩個防火牆:一個登錄表單
api
(用於API調用)main
(其他一切)
我的客戶端應用程序登錄通過發生main
防火牆。但是,它確實與api
防火牆下的端點進行交互以獲取數據。這裏的問題是,我不想強制用戶第二次登錄以對第二個防火牆進行身份驗證。
如何使用單一登錄表單對兩個防火牆進行身份驗證?
身份驗證多個Symfony2的防火牆,我有兩個防火牆:一個登錄表單
api
(用於API調用)main
(其他一切)我的客戶端應用程序登錄通過發生main
防火牆。但是,它確實與api
防火牆下的端點進行交互以獲取數據。這裏的問題是,我不想強制用戶第二次登錄以對第二個防火牆進行身份驗證。
如何使用單一登錄表單對兩個防火牆進行身份驗證?
也許你可以嘗試'上下文'防火牆屬性。
假設你有一個配置是這樣的(這大概是你做的):
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'中的任何後續請求都將使用'_security_primary_auth'的值來建立身份驗證狀態(並且用戶將顯示已驗證身份)。
當然,這種身份驗證上下文共享可以雙向使用(無論他們是首先使用'main'還是'api'防火牆) - 如果您只想在一個方向上實現瞬態過程,事情會變得更加複雜。
希望這會有所幫助。
輝煌!奇蹟般有效。 – anushr 2012-02-23 10:45:39
不錯,我一直在尋找這個很長一段時間! – PMoubed 2012-06-22 23:29:34
我有完全相同的問題,唯一的區別是「主」防火牆使用登錄形式而不是http_basic進行身份驗證,因此,即使用戶通過登錄形式進行身份驗證,'api'防火牆也會提示用戶再次登錄。有什麼辦法可以使它工作嗎? – Xocoatzin 2012-08-03 18:27:35