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

时间:2017-08-28 01:45:48

标签: asp.net-mvc asp.net-core asp.net-identity identityserver4

如何将现有的asp.net MVC应用程序与单独的IdentityServer应用程序集成?

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

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

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

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

但我找不到任何关于如何让我现有的Asp.net应用程序使用新的身份服务器进行身份验证的示例。

2 个答案:

答案 0 :(得分:3)

使用IdentityServer4构建身份验证应用程序。将您的每个应用程序视为identityServer4客户端和API ApiResources,因此它们都将具有唯一的clientidcallback 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

在三个应用中实现共享身份验证

this is the best place to start

答案 1 :(得分:3)

你说过你将有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 Identity中的当前用户数据库。这将是IdentityServer权限的客户端(上面的#1)。您可以使用授权代码流(更安全)或选择隐式或混合流。有关如何将ASP.NET MVC Web应用程序设置为IdentityServer实例的客户端的示例,请参阅其官方文档:http://docs.identityserver.io/en/latest/quickstarts/3_interactive_login.html#creating-an-mvc-client

  4. 基本上,你

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

    1. 移动客户端。除了使用Implicit Flow之外,这将是另一个客户端,如MVC Web应用程序。再次注册客户端,然后对应用程序进行编码。