Asp.net mvc 如何将现有asp.net MVC应用程序与IdentityServer集成?
如何将现有asp.net MVC应用程序与单独的IdentityServer应用程序集成 我有一个使用identity 2.0进行身份验证的现有asp.net MVC站点 我现在有了第二个运行asp.net Core 1.1的应用程序,它提供与客户端(移动)应用程序对话的API 我需要在所有3个应用程序中共享身份验证 从我所读到的内容来看,我需要添加SSO,而IdentityServer似乎是一个很好的解决方案。我计划将IdentityServer设置为第四个应用程序,并将其连接到新的.net API应用程序和客户端应用程序Asp.net mvc 如何将现有asp.net MVC应用程序与IdentityServer集成?,asp.net-mvc,asp.net-core,asp.net-identity,identityserver4,Asp.net Mvc,Asp.net Core,Asp.net Identity,Identityserver4,如何将现有asp.net MVC应用程序与单独的IdentityServer应用程序集成 我有一个使用identity 2.0进行身份验证的现有asp.net MVC站点 我现在有了第二个运行asp.net Core 1.1的应用程序,它提供与客户端(移动)应用程序对话的API 我需要在所有3个应用程序中共享身份验证 从我所读到的内容来看,我需要添加SSO,而IdentityServer似乎是一个很好的解决方案。我计划将IdentityServer设置为第四个应用程序,并将其连接到新的.net
但是我找不到任何示例来说明如何让我现有的Asp.net应用程序使用新的identity server进行身份验证。您可以使用来构建身份验证应用程序。将每个应用程序视为identityServer4客户端和API,这样它们都将具有唯一的
clientid
,回调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范围
和您将有4份申请
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或令牌
您说您使用identity 2.0对asp.net MVC应用程序进行身份验证。它是像谷歌这样的外部身份提供商吗?切换到Identity Server 4后是否保留?否,所有身份验证都是内部的,没有外部提供程序。切换链接断开后,我不需要继续使用它