使用角色进行匿名身份验证

Authenticate anonymously with roles

我有一个 Authenticator 需要匿名验证用户,但包含一个角色。我通过覆盖 Authenticator 中的 createAuthenticatedToken 来做到这一点:

class ClientAuthenticator extends AbstractGuardAuthenticator
{
    // supports(), getCredentials(), all working

    public function getUser($credentials, UserProviderInterface $userProvider)
    {
        return new SessionUser;
    }

    // Return an anonymous user with the client role
    public function createAuthenticatedToken(UserInterface $user, $providerKey)
    {
        return new AnonymousToken(
            'Ynpir6i',                // <-- here's the issue (the $secret param)
            'anon.',
            ['ROLE_CLIENT_GUEST']
        );
    }
}

当我对 AnonymousToken 的“秘密”参数进行硬编码时,效果非常好。

不过我不知道如何动态获取这个秘密。它不是 parameters.yml(又名 %kernel.secret%)中提供的“秘密”参数。

我现在使用的秘密是在 AnonymousAuthenticationListener 中设置时将其转储出来的。我查看了该服务的配置,但根本看不到它的设置。

这个秘密参数是什么,如何将它注入我的身份验证器?

或者,是否有更好的方法将角色添加到以特定方式进行身份验证的匿名令牌?

该参数可以设置为 security.yml 中的已知值:

security:
    firewalls:
        main:
            anonymous:
                secret: '%secret%'