[英]Symfony2 authentication using a webservice
我的应用程序使用Web服务检查用户名和密码是否正确。 我只是以这种简单的方式从登录表单发送用户名和密码:
https://host/check?user=admin&password=12345"
该Web服务位于另一台服务器上,并且只能从该应用访问,并且通信已加密。
验证后,Web服务将返回我需要的有关用户的所有信息(姓名,电子邮件等),因此, 我在数据库中不保留任何信息 。
在symfony 1中,这很容易做到,但是我看到symfony 2安全组件喜欢使事情复杂化。
在symfony 2中实现这种身份验证的最佳方法是什么?
谢谢
我相信您想要做的是在文档中拥有其自己的页面。 看看如何创建自定义用户提供程序 ,它很好地介绍了如何使用Web服务验证用户身份。
更新:
是的,我共享的链接告诉您如何创建用户提供程序。 这正是您必须要做的。 在此页的第一段中,它说:
当用户提交用户名和密码时,身份验证层会要求配置的用户提供程序返回给定用户名的用户对象。
因此,您需要创建一个扩展UserInterface
的类,并且该类应具有从Web服务返回的所有属性(同样,默认情况下,UserInterface需要一些属性,例如用户名,密码,salt和角色。但是,如果不使用盐和角色,则可以将其空白)。
然后,创建一个实现UserProviderInterface
的用户提供程序。 这样可以使您在执行登录时调用loadUserByUsername
函数。 在此功能中,您将执行Web服务请求,并发送凭据。 然后,您的请求响应可以映射到您创建的User类。 然后,您返回使用从Web服务返回的数据创建的User对象。
为了使Symfony知道您要使用自定义用户提供程序进行表单登录,需要为用户提供程序创建服务。 因此,在src/Acme/WebserviceUserBundle/Resources/config/services.yml
(您可能需要创建文件)中,您可以添加服务,如文档中概述的那样:
parameters:
# path to the user provider you just created
webservice_user_provider.class: Acme\WebserviceUserBundle\Security\User\WebserviceUserProvider
services:
webservice_user_provider:
class: "%webservice_user_provider.class%"
创建此服务后,只需告诉表单登录名使用此自定义提供程序即可。 在security.yml中:
security:
providers:
webservice:
# this id is the name of the service you created
id: webservice_user_provider
另外,如果您的密码在Web服务中已加密,则应确保Symfony用相同的方式对其进行加密以进行比较。 因此,在security.yml中,您可以添加
security:
encoders:
Acme\WebserviceUserBundle\Security\User\WebserviceUser: sha512 # or md5, or others
我在symfony2上遇到了同样的问题,不明白为什么这个框架会这样工作。 通过提供用户名和密码来对Web服务进行身份验证是很常见的,这是您在symfony2中不会发现的。 我通过将用户名和密码作为一个由特殊分隔符(如## || ##之类)分隔的串联字符串传递给loadUserByUsername()
方法来解决此问题。 我不记得详细信息,但是修改此方法调用的代码部分并不困难。 因此,我可以通过提供用户名和密码,在loadUserByUsername()
方法中调用Web服务的身份验证服务,并在找回用户时让symfony进行其余工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.