Php 使用Web服务的Symfony2身份验证
我的应用程序使用Web服务检查用户名和密码是否正确。我只是以如下简单方式从登录表单发送用户名和密码:Php 使用Web服务的Symfony2身份验证,php,web-services,symfony,authentication,Php,Web Services,Symfony,Authentication,我的应用程序使用Web服务检查用户名和密码是否正确。我只是以如下简单方式从登录表单发送用户名和密码: https://host/check?user=admin&password=12345“ 该Web服务位于另一台服务器上,只能通过应用程序访问,而且通信也是加密的 身份验证后,Web服务返回我需要的有关用户的所有信息(姓名、电子邮件等),因此我不会在数据库中保留任何信息 在symfony1中,这很容易做到,但我看到symfony2安全组件喜欢将事情复杂化很多 在symfony 2中实现这种身份
https://host/check?user=admin&password=12345“
该Web服务位于另一台服务器上,只能通过应用程序访问,而且通信也是加密的
身份验证后,Web服务返回我需要的有关用户的所有信息(姓名、电子邮件等),因此我不会在数据库中保留任何信息
在symfony1中,这很容易做到,但我看到symfony2安全组件喜欢将事情复杂化很多
在symfony 2中实现这种身份验证的最佳方法是什么
谢谢你我相信你想做的事情在文档中有自己的页面。看一下,它很好地演示了如何使用Web服务来验证你的用户 更新: 是的,我共享的链接告诉你如何创建用户提供商。这正是你必须做的。在本页的第一段,它说: 当用户提交用户名和密码时,身份验证层要求配置的用户提供程序返回给定用户名的用户对象 因此,您需要创建一个类来扩展
用户界面
,该类应该具有从web服务返回的所有属性(默认情况下,用户界面需要一些属性,例如用户名、密码、salt和角色。但是,如果不使用salt和角色,则它们可以为空)
然后创建一个用户提供程序,该提供程序实现userprovidedinterface
。这样,当您执行登录时,将调用函数loadUserByUsername
。在此函数中,您执行Web服务请求,发送凭据。然后,请求的响应可以映射到您的用户类t然后返回使用从Web服务返回的数据创建的用户对象
为了让Symfony知道您想使用自定义用户提供程序登录表单,您需要为您的用户提供程序创建一个服务。因此,在src/Acme/webservicesuserbundle/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:
encoders:
Acme\WebserviceUserBundle\Security\User\WebserviceUser: sha512 # or md5, or others
我对symfony2也有同样的问题,不明白为什么这个框架会这样工作。通过提供用户名和密码对Web服务进行身份验证是很常见的,而这在symfony2中是无法直接获得的。 我解决了这个问题,将用户名和密码作为一个串接字符串传递给
loadUserByUsername(),字符串之间用一个特殊的分隔符分隔(如##| |###)
-method。我不记得详细信息,但修改调用此方法的代码部分并不困难。因此,我可以在loadUserByUsername()中调用Web服务的身份验证服务
-提供用户名和密码的方法,当找回一个用户时,让symfony来做其余的事情。事实上,您需要一个密码和使用安全性
有很多教程解释了如何在web上为Symfony设置WSSE。这只说明了如何创建用户提供程序。但我必须将密码发送到web服务,如果密码正确,该服务将返回用户数据。因此,在调用web服务后,我必须对用户进行身份验证。如何跳过本节的其余部分symfony步骤?我更新了答案。您必须创建自定义用户提供程序。这是唯一的方法。这为用户提供了编码密码,以便symfony可以检查密码是否相同。但我不能这样做,因为Web服务需要用户提供的用户和密码。我必须向Web服务发送用户和密码,如下所示:和Web服务将回复(带有用户配置文件数据)如果凭据正确与否。请查看。您要执行的操作不是symfony内置的,因为它改变了symfony处理安全性的方式。因此,您将需要自定义身份验证提供程序以及自定义用户提供程序。另外,请查看关于创建自定义身份验证提供程序的信息。