Asp.net mvc 如何将现有asp.net MVC应用程序与IdentityServer集成?

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 MVC应用程序与单独的IdentityServer应用程序集成

我有一个使用identity 2.0进行身份验证的现有asp.net MVC站点

我现在有了第二个运行asp.net Core 1.1的应用程序,它提供与客户端(移动)应用程序对话的API

我需要在所有3个应用程序中共享身份验证

从我所读到的内容来看,我需要添加SSO,而IdentityServer似乎是一个很好的解决方案。我计划将IdentityServer设置为第四个应用程序,并将其连接到新的.net API应用程序和客户端应用程序


但是我找不到任何示例来说明如何让我现有的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份申请

  • 用于身份和访问控制的IdentityServer4应用程序。这将是SSO服务和STS(安全令牌服务)-授权。从今天起,您将在ASP.NET core 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实例的客户端的示例,请参见其官方文档:

  • 基本上,你

    (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或令牌

  • 移动客户端。除了使用隐式流之外,这将是另一个类似于MVCWeb应用程序的客户端。再次注册客户端,然后对应用程序进行编码

  • 您说您使用identity 2.0对asp.net MVC应用程序进行身份验证。它是像谷歌这样的外部身份提供商吗?切换到Identity Server 4后是否保留?否,所有身份验证都是内部的,没有外部提供程序。切换链接断开后,我不需要继续使用它