リモートサーバーで認証を行うsymfony 2.8アプリを開発しています。認証は、フォームまたは API キー (simple_preauth) を介して渡されます。認証が成功すると、セッション キーが Cookie に保存されるため、simple_preauth オーセンティケータ (stateless を true に設定) がリクエストごとにチェックします。その simple_preauth オーセンティケーターは 2 つのことを可能にします: 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 の例外リスナー)。実際、「stateless: true」は simple_preauth にのみ必要で、simple_form には必要ありません。ファイアウォールを 2 つのファイアウォールに分割し、フォーム キーと API キーの両方を介して認証する機能を維持する正しい方法があるのではないでしょうか?
- 認証されたユーザーだけがページにアクセスできるように、アクセス制御を整理するより適切な方法があるのではないでしょうか?