首页 文章

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

提问于
浏览
9

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

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

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

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

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

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

2 回答

  • 3

    你说的将有4个申请 .

    • 用于身份和访问控制的IdentityServer4应用程序 . 这将是SSO服务和STS(安全令牌服务) - 权限 . 截至今天,您将在ASP.NET核心1.1中构建它 . 要成为SSO,您当然需要拥有一个用户数据库;使用ASP.NET Identity运行良好,并与IdentityServer很好地集成 .

    • 您的Web API,您说它运行的是ASP.NET Core 1.1 . 在OAuth术语中,这称为 API Resource . 您可以将此API细分为名为 API Scopes 的单独安全部分 .

    • 现有的MVC Web应用程序,包含ASP.NET Identity中的当前用户数据库 . 这将是IdentityServer权限的 Client (上面的#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 Web应用程序的“外部提供程序” .

    您是否要将现有的用户名和密码(以及角色等)迁移到新的IdentityServer实例/数据库?这个答案必须是“是”才能实现跨应用程序的SSO和共享身份以及访问控制 .

    只有用户使用IdentityServer应用程序登录时才可以使用SSO . 但是,您可能实际上不会实现SSO,因为他们在台式机上使用浏览器而在手机上使用移动应用程序 - 实际上并不能跨设备共享cookie或令牌 .

    • 移动客户端 . 除了使用Implicit Flow之外,这将是另一个客户端,如MVC Web应用程序 . 再次,注册客户端,然后编写应用程序代码 .
  • 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的工作原理 . 然后,您需要构建身份服务器应用程序,以访问您的用户上下文 . You will achieve share authentication across three app by allowing same api scope.

    this is the best place to start

相关问题