The Entry Point: Helping Users Start Authentication

When an unauthenticated user tries to access a protected page, Symfony gives them a suitable response to let them start authentication (e.g. redirect to a login form or show a 401 Unauthorized HTTP response for APIs).

認証されていないユーザーが保護されたページにアクセスしようとすると、Symfony は適切な応答を提供して認証を開始できるようにします (例: ログインフォームにリダイレクトするか、API に対して 401 Unauthorized HTTP 応答を表示します)。

However sometimes, one firewall has multiple ways to authenticate (e.g. both a form login and a social login). In these cases, it is required to configure the authentication entry point.

ただし、1 つのファイアウォールに複数の認証方法がある場合があります (フォーム ログインとソーシャル ログインの両方など)。このような場合、認証エントリ ポイントを設定する必要があります。

You can configure this using the entry_point setting:

これは、entry_point 設定を使用して構成できます。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
# config/packages/security.yaml
security:

    # ...
    firewalls:
        main:
            # allow authentication using a form or a custom authenticator
            form_login: ~
            custom_authenticators:
                - App\Security\SocialConnectAuthenticator

            # configure the form authentication as the entry point for unauthenticated users
            entry_point: form_login

Note

ノート

You can also create your own authentication entry point by creating a class that implements AuthenticationEntryPointInterface. You can then set entry_point to the service id (e.g. entry_point: App\Security\CustomEntryPoint)

また、AuthenticationEntryPointInterface を実装するクラスを作成することで、独自の認証エントリ ポイントを作成することもできます。

Multiple Authenticators with Separate Entry Points

However, there are use cases where you have authenticators that protect different parts of your application. For example, you have a login form that protects the main website and API end-points used by external parties protected by API keys.

ただし、アプリケーションのさまざまな部分を保護するオーセンティケーターがある場合もあります。たとえば、メイン Web サイトと、API キーで保護された外部関係者が使用する API エンドポイントを保護するログイン フォームがあるとします。

As you can only configure one entry point per firewall, the solution is to split the configuration into two separate firewalls:

ファイアウォールごとに 1 つのエントリ ポイントしか構成できないため、解決策は、構成を 2 つの別個のファイアウォールに分割することです。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# config/packages/security.yaml
security:
    # ...
    firewalls:
        api:
            pattern: ^/api/
            custom_authenticators:
                - App\Security\ApiTokenAuthenticator
        main:
            lazy: true
            form_login: ~

    access_control:
        - { path: '^/login', roles: PUBLIC_ACCESS }
        - { path: '^/api', roles: ROLE_API_USER }
        - { path: '^/', roles: ROLE_USER }