Symfony 5:授权多个守卫和不同的提供者

Symfony 5: Auth Multiple Guards and Different Providers

我正在努力使用 Symfony 的保护身份验证系统 API,它似乎无法按照我的需要工作。

是否可以使用多个身份验证器和不同的提供商?

我需要灵活性,以便用户可以通过两种方式针对相同的端点进行身份验证。

我的防火墙目前是:

        api:
          pattern: ^/
          stateless: true
          provider: jwt
          guard:
              authenticators:
                  - App\Security\InviteCodeAuthenticator
                  - lexik_jwt_authentication.jwt_token_authenticator
              entry_point: App\Security\InviteCodeAuthenticator

JWT 和邀请码需要完全不同的用户提供者。如果我为每个创建一个不同的防火墙,那么我有相同的 URL 受不同的防火墙保护,我需要它来使用。

我正在努力尝试让这个现在工作,我觉得我遗漏了一些明显的东西。

对于可能遇到此问题的任何其他人,我必须使用 Symfony 的新实验性身份验证系统才能使其正常工作:

https://symfony.com/doc/current/security/experimental_authenticators.html#authenticators-removed-anonymous

然后使用混合防火墙:

        api:
          pattern: ^/
          stateless: true
          provider: jwt
          entry_point: App\Security\InviteCodeAuthenticator
          custom_authenticators:
                  - App\Security\InviteCodeAuthenticator
          guard:
            authenticators:
                  - lexik_jwt_authentication.jwt_token_authenticator

这允许我的邀请码验证器检查有效邀请码的请求,并允许回退以期待 JWT 的身份验证或失败。