簡體   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