繁体   English   中英

使用Web服务进行Symfony2身份验证

[英]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

实际上,您需要身份验证提供程序并使用WSSE安全性。

有很多教程解释了如何在Web上为Symfony设置WSSE。

我在symfony2上遇到了同样的问题,不明白为什么这个框架会这样工作。 通过提供用户名和密码来对Web服务进行身份验证是很常见的,这是您在symfony2中不会发现的。 我通过将用户名和密码作为一个由特殊分隔符(如## || ##之类)分隔的串联字符串传递给loadUserByUsername()方法来解决此问题。 我不记得详细信息,但是修改此方法调用的代码部分并不困难。 因此,我可以通过提供用户名和密码,在loadUserByUsername()方法中调用Web服务的身份验证服务,并在找回用户时让symfony进行其余工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM