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

Rob*_*lls 10 asp.net-mvc asp.net-identity asp.net-core identityserver4

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

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

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

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

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

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

tra*_*.js 5

您将陈述4个申请。

  1. IdentityServer4应用程序用于身份和访问控制。这将是SSO服务和STS(安全令牌服务)的权限。从今天开始,您将在ASP.NET core 1.1中构建它。要成为SSO,您当然需要拥有一个用户数据库。使用ASP.NET Identity可以很好地工作,并且可以与IdentityServer很好地集成。

  2. 您所说的Web API正在运行ASP.NET Core 1.1。用OAuth术语来说,这称为API资源。您可以将此API细分为可单独保护的部分,称为API Scopes

  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

本质上,你

(a)向IdentityServer注册客户端,然后

(b)在客户端应用中添加一些启动代码,以告知其使用IdentityServer进行身份验证-类似于以下内容...

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    AuthenticationScheme = "oidc",
    SignInScheme = "Cookies",

    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,

    ClientId = "mvc",
    SaveTokens = true
});
Run Code Online (Sandbox Code Playgroud)

此时,您可以同时使用内部用户数据库和外部IdentityServer进行登录-也就是说,您可以通过两种不同的方式登录MVC Web应用程序。IdentityServer应用程序可以被视为您的MVC Web应用程序的“外部提供程序”。

您是否要将现有的用户名和密码(以及角色等)迁移到新的IdentityServer实例/数据库?要在各个应用程序之间实现SSO和共享身份以及访问控制,必须回答“是”。

仅当用户使用IdentityServer应用程序登录时,才可以使用SSO。但是,您可能实际上无法实现SSO,因为他们在台式机上使用浏览器,在电话上使用移动应用程序-无法真正跨设备共享Cookie或令牌。

  1. 移动客户端。除了可以肯定使用“隐式流程”之外,这将是另一个类似于MVC Web应用程序的客户端。再次,注册客户端,然后对应用程序进行编码。