我需要为具有2个用户提供商的Symfony 2项目实施身份验证:
过程非常简单:用户使用用户名和密码填写身份验证表单。这些信息首先针对用户数据库进行检查,如果没有找到,则将用户名和密码发送到web服务,如果用户存在,则返回200状态代码和令牌(另一个webservice将在稍后给我用户的角色)。 / p>
问题是,我不应该将webservice提供的用户添加到数据库中。
我首先考虑使用自定义UserProvider(http://symfony.com/doc/current/cookbook/security/custom_provider.html),但方法loadUserByUsername
不允许我使用密码识别用户。
我想到的解决方案是创建一个从Web服务到临时表的用户,以便从数据库中识别用户,但我宁愿实现更优雅的解决方案。
关于如何以正确的方式做到这一点的任何想法?
答案 0 :(得分:3)
UserProvider允许您在用户通过身份验证后获取User对象,UserProvider不会对用户本身进行身份验证。我认为你需要的是使用SimplePreAuthenticatorInterface的自定义Authenticator。
以下是有关如何执行此操作的详细说明:http://symfony.com/doc/master/cookbook/security/api_key_authentication.html
本质上,symfony将调用Authenticator,并根据您的Web服务验证用户凭据。成功时,将获取并返回用户对象(最后使用自定义UserProvider)。