Security 与自定义AuthenticationProvider一起使用UsernamePasswordForm身份验证

Security 与自定义AuthenticationProvider一起使用UsernamePasswordForm身份验证,security,authentication,symfony,Security,Authentication,Symfony,我正在为Symfony2的自定义身份验证机制而挣扎 我想做的是: 我需要修改常规的基于UsernamePasswordForm的身份验证的行为。所需的唯一修改是,不会根据数据库检查凭据,而是一些自定义unix身份验证数据。用户本身仍然位于数据库中 我所做的: 我将在此基础上开发一个成熟的自定义身份验证提供程序,并将大部分内容扩展为不同的UsernamePassword类,但还没有成功。我在服务配置中设置AuthenticationListener时遇到了一些特别的问题,因为UsernamePas

我正在为Symfony2的自定义身份验证机制而挣扎

我想做的是: 我需要修改常规的基于UsernamePasswordForm的身份验证的行为。所需的唯一修改是,不会根据数据库检查凭据,而是一些自定义unix身份验证数据。用户本身仍然位于数据库中

我所做的: 我将在此基础上开发一个成熟的自定义身份验证提供程序,并将大部分内容扩展为不同的UsernamePassword类,但还没有成功。我在服务配置中设置AuthenticationListener时遇到了一些特别的问题,因为UsernamePasswordFormAuthenticationListener有很多必需的参数。目前,我不确定它是否会在最后解决,因为我们的数据库设置有一些问题

我需要的是: 有没有更简单的方法来修改默认登录表单,而不需要完全的AuthenticationProvider?在默认行为中进行一些自定义修改是一个非常常见的问题


如果您有任何想法或提示,我将非常高兴。

我自己没有尝试过,但您应该能够通过设置参数插入自己的AuthenticationProvider:

   security.authentication.provider.dao.class:
   ..Security\Core\Authentication\Provider\MyDaoAuthenticationProvider
您的提供者将扩展Dao和overide checkAuthentication


再说一次,我还没有真正做到这一点,而且安全系统非常敏感,所以它可能会工作,也可能不会工作。

回答我自己的问题:我终于设法解决了我的问题,这要归功于展示了一个解决方案。基本思想是扩展默认表单登录身份验证并窃取其侦听器。通过这种方式,您可以重用大部分现有代码。关键部分是AuthenticationProvider和SecurityFactory的创建和配置。不要错过使用自己的提供者密钥而不是security.yml中的form_登录


在博客文章中,作者创建了自己的用户提供者,但它也只使用默认的数据库提供者。

谢谢你的建议。阅读您的想法提醒我,我在某处已经看到了一个以这种方式覆盖核心类的解决方案。不知道为什么我没有进一步调查。我会在假期后报告,如果这能解决问题。我只是发布了我自己的答案,因为我发现了一个非常有用的博客帖子。它与你的想法和你的想法有着相同的基础,也许更短,也更有效。。。但这样我就安全了D