[英]Implement authentication API in PHP
我有一個現有的Django應用(D),我想與一個PHP應用(在不同服務器上的P)連接以進行身份驗證。 也就是說,用戶登錄到D,后者在P上調用服務以檢查其密碼。 他們還需要最終擁有一個本地用戶帳戶,並將有關他們的屬性存儲在D中。實際的安全要求非常低。 D很難直接訪問P的數據庫。
從來沒有實現過任何身份驗證,我在想這樣的事情:
因此,有幾個問題:
由於您已經提到兩個服務器都在同一機構/網絡中,因此只要您使用HTTPS而不是純HTTP,身份驗證就可以工作。
D: Collect username and password, compute hash (using same algorithm as P)
除非您可以確定PHP哈希與Django哈希相同,否則我建議您通過(但不能通過純HTTP,請參見第2點)發送密碼。
Call web service (HTTP) on P, passing username and hash
僅在絕對確定兩個服務器直接連接時,才應使用純HTTP。 否則,您很容易受到典型的Web攻擊(例如,中間人)的攻擊,在這種攻擊中,您會清楚地傳輸(散列)密碼。 我假設在PHP應用程序端,您正在直接驗證哈希值是否相同。 如果不確定網絡狀況,請確保您正在通過HTTPS調用Web服務。
P: Look up username, fail if it doesn't exist.
P: If it does, check stored hash against passed hash, fail if different.
P: If ok, return some other information about the user (eg, full name, some domain-specific stuff), otherwise return fail
D: If ok, create/update the user record
D: If ok, then log them in.
這些步驟很好,但是如果要在兩個數據庫之間尋求持續的用戶同步,則需要找到一種更新自己的用戶數據庫的方法。 如果PHP應用程序禁用/刪除了用戶,則Django應用程序需要獲取該更改,否則您仍將允許已刪除的用戶在Django端登錄。
有兩種方法可以解決此問題:
第一種方法比較簡單,但效率和安全性卻不高,因為用戶仍可以在下次輪詢之前登錄Django。 如果安全性不是至關重要的,並且用戶數量很少,則建議這樣做。
第二種方法更好,但是您將不得不編寫更多代碼來管理同步(PHP和Django)。 這種方法要好得多,因為您幾乎可以立即跟蹤PHP應用程序中的用戶更改並將其反映在您自己的數據庫中,如果用戶不使用Django應用程序,則可以忽略PHP端對用戶的更改(因此,記錄在您的身邊)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.