簡體   English   中英

無需 SSO 從另一台服務器進行身份驗證

[英]Authenticate without SSO from another server

我有一個場景,我們有一個基於 PHP 的網站,用戶通過該網站使用存儲在數據庫中的憑據登錄。 現在我們有了另一個 SPA 網站,其中 .NET CORE 作為 API 層。我們沒有像 Azure 這樣的中央身份驗證服務器的選項。 如果我想讓 SPA 的用戶訪問網站,因為他們已經在 PHP 中進行了身份驗證,我該怎么辦? PHP 可以生成 JWT 以將其傳遞給 API 嗎? JWT 然后如何進入 SPA 以及如何驗證它? 請善待,因為我是網站編程的新手。

Json Web Tokens是不記名令牌的一種非常特殊的格式。 有像 OpenID Connect 這樣的協議提供了更多關於登錄和信任過程的結構,但在它們的核心,JWT 只是 BASE64 編碼的 json 和驗證 hash。

您可以使用 JWT 滾動您自己的 SSO,但與安全中的所有內容一樣,滾動您自己的 SSO 會帶來重大風險,即犯下嚴重錯誤並危及您的安全性。 所以如果你走這條路,研究研究和研究更多。

我做了一件非常相似的事情,但純粹停留在 .net 世界中。 I used a .net library to build the JWT ( https://docs.microsoft.com/en-us/previous-versions/visualstudio/dn464181(v%3Dvs.114) ) and ASP.NET Core Identity to handle verification of the JWT ( https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearer )所以我沒有編寫代碼來實際生成 Z1D1FADBD9150349C135781140FZFFEE。 服務器之間也只有 SSL 連接,因此降低了令牌被嗅探的一些風險。

有用於 PHP 的庫來生成 JWT 或者您可以使用任何語言建立自己的 JWT 令牌提供程序。

也有可能找到一個可以連接到您現有數據庫的 OpenId Connect 提供程序。 Identity Server 4是 .net 的一種,但在 PHP 世界中可能會找到一種。 這會帶來一些開銷,但確實解決了無法擁有第三方 OpenId Connect 提供程序的問題。

它不是太糟糕,但安全是您絕對確保您做對的地方之一。

從另一台服務器進行身份驗證SSO。 有很多方法可以做到這一點,但是像 OpenID Connect 和 SAML 這樣的 SSO 協議是專門為你想要做的事情而設計的。

然而,這些協議絕非簡單。 您應該嘗試查看是否可以找到現有的庫,讓您的 PHP 應用程序充當身份提供者 (IdP),並讓您的 SPA 充當使用相同協議的服務提供者 (SP)。

這是一個延伸的想法-您沒有解釋為什么不能使用中央身份驗證服務器。 您可能會考慮使用 Keycloak 之類的東西(還有其他選項 - 這是我使用過的選項),您可以自行托管,並且可以使用 OpenID-Connect 或 SAML 2.0 作為 IdP 或 SP。

你絕對不應該自己從頭開始構建它(除非這是一個愛好項目)。 身份驗證充滿了安全隱患,即使是最有經驗的程序員也會絆倒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM