1

我正在开发一个在远程服务器上进行身份验证的 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

问题

  1. security.yml 文件中的设置“stateless: true”会在登录后禁用 target_path 重定向(github 上的 Exception Listener)。事实上,只有 simple_preauth 需要“stateless: true”,而 simple_form 不需要。也许有一种正确的方法可以将防火墙分成两个防火墙,仍然保持通过表单和 api 密钥进行身份验证的能力?
  2. 也许有一种更正确的方法来组织访问控制,以便只有经过身份验证的用户才能访问页面?
4

0 回答 0