我正在开发一个在远程服务器上进行身份验证的 symfony 2.8 应用程序。身份验证通过表单或 api 密钥 (simple_preauth) 传递。成功验证后,会话密钥会保存在 cookie 中,以便我的 simple_preauth 验证器(无状态设置为 true)在每个请求上检查它。simple_preauth 身份验证器允许做两件事:通过在 get 参数中传递的秘密 api 密钥对用户进行身份验证,并检查当前会话是否在远程服务器上过期。只有经过身份验证的用户才能做任何事情。所以有我的 security.yml 文件:
providers:
webservice:
id: app.webservice_user_provider
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY}
- { path: ^/, roles: ROLE_USER}
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
provider: webservice
stateless: true
simple_form:
authenticator: app.form_authenticator
login_path: /login
check_path: /login_check
success_handler: app.auth_success_handler
simple_preauth:
authenticator: app.sessionlogin_authenticator
logout:
path: /logout
target: /login
success_handler: app.logout_handler
问题:
- security.yml 文件中的设置“stateless: true”会在登录后禁用 target_path 重定向(github 上的 Exception Listener)。事实上,只有 simple_preauth 需要“stateless: true”,而 simple_form 不需要。也许有一种正确的方法可以将防火墙分成两个防火墙,仍然保持通过表单和 api 密钥进行身份验证的能力?
- 也许有一种更正确的方法来组织访问控制,以便只有经过身份验证的用户才能访问页面?