如何将现有的asp.net MVC应用程序与单独的IdentityServer应用程序集成?
我有一个现有的asp.net MVC网站,使用身份2.0进行身份验证。
我现在有第二个运行asp.net Core 1.1的应用程序,它提供与客户端(移动)应用程序通信的API。
我需要在所有3个应用程序之间共享身份验证。
从我读过的内容来看,我需要添加SSO,IdentityServer似乎是一个很好的解决方案。我计划将IdentityServer设置为第四个应用程序,并将其连接到新的.net API应用程序和客户端应用程序。
但我找不到任何关于如何让我现有的Asp.net应用程序使用新的身份服务器进行身份验证的示例。
答案 0 :(得分:3)
使用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的工作原理。然后,您需要构建身份服务器应用程序,以访问您的用户上下文。 您将通过允许相同的api scope
答案 1 :(得分:3)
你说过你将有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 Identity中的当前用户数据库。这将是IdentityServer权限的客户端(上面的#1)。您可以使用授权代码流(更安全)或选择隐式或混合流。有关如何将ASP.NET MVC Web应用程序设置为IdentityServer实例的客户端的示例,请参阅其官方文档:http://docs.identityserver.io/en/latest/quickstarts/3_interactive_login.html#creating-an-mvc-client。
基本上,你
(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网络应用程序。
您是否要将现有的用户名和密码(以及角色等)迁移到新的IdentityServer实例/数据库?这个答案必须是"是"实现跨应用程序的SSO和共享身份以及访问控制。
仅当用户使用IdentityServer应用程序登录时才可以使用SSO。但是,您可能实际上无法实现SSO,因为他们在桌面计算机上使用浏览器,在手机上使用移动应用程序 - 实际上无法跨设备共享Cookie或令牌。