如何將現有的 asp.net MVC 應用程序與 IdentityServer 集成?
如何將現有的 asp.net MVC 應用程序與單獨的 IdentityServer 應用程序集成?
我有一個使用身份 2.0 進行身份驗證的現有 asp.net MVC 站點。
我現在有第二個應用程序執行 asp.net Core 1.1,它提供與客戶端(移動)應用程序對話的 API。
我需要在所有 3 個應用程序之間共享身份驗證。
根據我的閱讀,我需要添加 SSO,而 IdentityServer 似乎是一個很好的解決方案。我計劃將 IdentityServer 設置為第四個應用程序並將其連接到新的 .net API 應用程序和客戶端應用程序。
但是我找不到任何關於如何讓我現有的 Asp.net 應用程序使用新的身份伺服器進行身份驗證的範例。
你將有 4 個應用程序是你說的。
- 用於身份和訪問控制的 IdentityServer4 應用程序。這將是 SSO 服務和 STS(安全令牌服務)- 授權。從今天開始,您將在 ASP.NET core 1.1 中建構它。要成為 SSO,您當然需要擁有一個使用者數據庫;使用 ASP.NET Identity 可以很好地與 IdentityServer 集成。
- 您說的 Web API 正在執行 ASP.NET Core 1.1。在 OAuth 術語中,這稱為API 資源。您可以將此 API 細分為稱為API Scopes的單獨安全部分。
- 現有 MVC Web 應用程序與 ASP.NET 標識中的目前使用者數據庫。這將是 IdentityServer 授權的客戶端(上面的#1)。您可以使用授權程式碼流(更安全)或選擇隱式或混合流。如何將 ASP.NET MVC Web 應用程序設置為 IdentityServer 實例的客戶端的範例可以在他們的官方文件中找到:http ://docs.identityserver.io/en/latest/quickstarts/3_interactive_login.html#creating-一個 mvc 客戶端。
本質上,你
(a) 向 IdentityServer 註冊客戶端,然後
(b) 在客戶端應用程序中添加一些啟動程式碼,告訴它使用 IdentityServer 進行身份驗證——像這樣……
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions { AuthenticationScheme = "oidc", SignInScheme = "Cookies", Authority = "http://localhost:5000", RequireHttpsMetadata = false, ClientId = "mvc", SaveTokens = true });此時您可以同時使用內部使用者數據庫和外部 IdentityServer 進行登錄——也就是說,您可以通過兩種不同的方式登錄到 MVC Web 應用程序。IdentityServer 應用程序可以被視為 MVC Web 應用程序的“外部提供者”。
您是否要將現有的使用者名和密碼(以及角色等)遷移到新的 IdentityServer 實例/數據庫?這個答案必須是“是”才能實現 SSO 以及跨應用程序的共享身份和訪問控制。
只有當使用者使用 IdentityServer 應用程序登錄時,SSO 才是可能的。不過,您可能實際上不會實現 SSO,因為他們在台式機上使用瀏覽器,在手機上使用移動應用程序——實際上無法跨設備共享 cookie 或令牌。
- 移動客戶端。這將是另一個客戶端,例如 MVC Web 應用程序,但肯定會使用隱式流。再次註冊客戶端,然後對應用程序進行編碼。