如何将现有的asp.net MVC应用程序与IdentityServer集成?
如何将现有的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应用程序使用新的身份服务器进行身份验证。
你将有4个应用程序,你说。
身份和访问控制的IdentityServer4应用程序。这将是SSO服务和STS(安全令牌服务) - 权限。截至今天,您将在ASP.NET核心1.1中构建它。要成为SSO,您当然需要拥有一个用户数据库;使用ASP.NET Identity效果很好,并与IdentityServer很好地集成。
您的Web API,您说的是运行ASP.NET Core 1.1。以OAuth的形式,这被称为API资源。你可以把这个API分成几个单独的安全部分,称为API范围。
现有的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或令牌。
- 移动客户端。这将是MVC网络应用程序之外的另一个客户端,除非明确使用隐式流。再次注册客户端,然后编写应用程序代码。
您使用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
跨三个应用程序实现共享验证。
你说你使用身份2.0认证的asp.net MVC应用程序。它是像Google这样的外部身份提供者吗?您想在切换到Identity Server 4后保留它吗? – Ignas
不,所有的认证都是内部的,没有外部提供者。切换后我不需要继续使用它 –