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