Php 使用Web服务的Symfony2身份验证

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中实现这种身份

我的应用程序使用Web服务检查用户名和密码是否正确。我只是以如下简单方式从登录表单发送用户名和密码:

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处理安全性的方式。因此,您将需要自定义身份验证提供程序以及自定义用户提供程序。另外,请查看关于创建自定义身份验证提供程序的信息。