2017-08-28 166 views
4

如何將現有的asp.net MVC應用程序與單獨的IdentityServer應用程序集成?如何將現有的asp.net MVC應用程序與IdentityServer集成?

我有一個現有的asp.net MVC網站使用標識2.0身份驗證。

我現在有第二個應用程序運行asp.net Core 1.1,它服務於與客戶端(移動)應用程序交談的API。

我需要共享所有3個應用程序的身份驗證。

從我讀過的內容中,我需要添加SSO,IdentityServer似乎是一個很好的解決方案。我計劃將IdentityServer設置爲第四個應用程序,並將其連接到新的.net API應用程序和客戶端應用程序。

但我找不到任何示例如何讓我現有的Asp.net應用程序使用新的身份服務器進行身份驗證。

+0

你說你使用身份2.0認證的asp.net MVC應用程序。它是像Google這樣的外部身份提供者嗎?您想在切換到Identity Server 4後保留它嗎? – Ignas

+0

不,所有的認證都是內部的,沒有外部提供者。切換後我不需要繼續使用它 –

回答

1

你將有4個應用程序,你說。

  1. 身份和訪問控制的IdentityServer4應用程序。這將是SSO服務和STS(安全令牌服務) - 權限。截至今天,您將在ASP.NET核心1.1中構建它。要成爲SSO,您當然需要擁有一個用戶數據庫;使用ASP.NET Identity效果很好,並與IdentityServer很好地集成。

  2. 您的Web API,您說的是運行ASP.NET Core 1.1。以OAuth的形式,這被稱爲API資源。你可以把這個API分成幾個單獨的安全部分,稱爲API範圍

  3. 現有的MVC Web應用程序與ASP.NET身份中的當前用戶數據庫。這將是IdentityServer權限(上面的#1)的客戶端。您可以使用授權碼流(更安全)或選擇隱式或混合流。有關如何將ASP.NET MVC Web應用程序設置爲IdentityServer實例的客戶端的示例,請參閱其官方文檔:http://docs.identityserver.io/en/latest/quickstarts/3_interactive_login.html#creating-an-mvc-client

從本質上講,你

(一)註冊IdentityServer客戶端,然後

(b)增加在客戶端應用程序的啓動代碼會告訴它使用IdentityServer的認證 - 東西像這樣...

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    AuthenticationScheme = "oidc", 
    SignInScheme = "Cookies", 

    Authority = "http://localhost:5000", 
    RequireHttpsMetadata = false, 

    ClientId = "mvc", 
    SaveTokens = true 
}); 

你可以在這一點上都使用在記錄,以及作爲外部IdentityServer-內部用戶數據庫,您可以登錄我n以MVC Web應用程序兩種不同的方式。 IdentityServer應用程序可以被視爲您的MVC網絡應用程序的「外部提供者」。

您打算將現有的用戶名和密碼(以及角色等)遷移到新的IdentityServer實例/數據庫嗎?這個答案必須是「是」才能實現跨應用程序的SSO和共享身份和訪問控制。

SSO只有在用戶使用IdentityServer應用程序登錄時纔有可能。雖然,您可能實際上不會實現SSO,因爲他們在桌面計算機上使用瀏覽器,在手機上使用移動應用程序,但實際上無法跨設備共享Cookie或令牌。

  1. 移動客戶端。這將是MVC網絡應用程序之外的另一個客戶端,除非明確使用隱式流。再次註冊客戶端,然後編寫應用程序代碼。
2

您使用IdentityServer4構建您的身份驗證應用程序。將您的每個應用程序作爲identityServer4客戶端和API作爲ApiResources,因此它們都將具有唯一的clientid,callback uri等。您需要將IdentityServerAuthenticationOptions添加到API,並將OpenIdConnectOptions添加到mvc應用程序。

例如,的WebAPI startup.cs可能有:

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
    { 
     Authority = "http://localhost:5000", 
     RequireHttpsMetadata = false, 

     ApiName = "api1" 
    }); 

    app.UseMvc(); 
} 

無論如何,首先你需要了解如何IdentityServer工作。然後你需要構建可以訪問用戶上下文的Identityserver應用程序。 您將通過允許相同的api scope跨三個應用程序實現共享驗證。

而且this is the best place to start

相關問題