身份验证多个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