Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller Asp.NETMVC核心2-共享身份验证cookie_Model View Controller_Asp.net Core 2.0_Cookie Authentication - Fatal编程技术网

Model view controller Asp.NETMVC核心2-共享身份验证cookie

Model view controller Asp.NETMVC核心2-共享身份验证cookie,model-view-controller,asp.net-core-2.0,cookie-authentication,Model View Controller,Asp.net Core 2.0,Cookie Authentication,我有多个应用程序在localhost下运行,最终将部署在一个域名下,如 申请如下: 当用户访问app1时,它会在内部使用安全应用程序将其登录。 我正在使用cookie身份验证。现在,当用户移动到app2时,我希望app2使用由app1创建的cookie,而不要求再次进行身份验证 Startup.cs: public void ConfigureServices(IServiceCollection services) { services.AddAuthentic

我有多个应用程序在localhost下运行,最终将部署在一个域名下,如

申请如下:




当用户访问app1时,它会在内部使用安全应用程序将其登录。 我正在使用cookie身份验证。现在,当用户移动到app2时,我希望app2使用由app1创建的cookie,而不要求再次进行身份验证

Startup.cs:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.AccessDeniedPath = new PathString("/LogUser/RestrictedAccess");
            options.LoginPath = new PathString("/LogUser/Login");
            options.SlidingExpiration = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
            options.SessionStore = new MemoryCacheTicketStore();
            options.Cookie.Name = ".AspNet.SharedCookie";
            options.Cookie.Path = "/";
            options.ReturnUrlParameter = "OriginalUrl";
        });
        services.AddSession();
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseSession();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

主要有两种选择:

  • 使用分散的身份验证/授权平台。提供付费上门服务解决方案,或者您也可以自己设置。虽然安装可能更复杂,但走这条路线将为您提供一个可扩展的解决方案,可以满足您现在和将来的需求。您是否也需要一个API应用程序?你可以走了

  • 按字面意思分享饼干。这是相对简单的实现,但很快就会过时。如果其中一个应用程序最终需要在不同的域上托管,那么你就完了。需要授权API吗?运气不好

  • 如果您决定使用选项2(您问题中要求的方法),您需要注意以下几点:

  • 因为这取决于看到相同cookie的所有应用,所以您需要确保它们都托管在该域的相同域或子域上(在这种情况下,您需要将cookie的域设置为通配符)。看起来情况已经是这样了,但值得强调的是这一点。如果您的设置发生了更改,以致某些应用程序无法再看到cookie,则您的操作已完成

  • 您需要为每个应用程序配置相同的
    DataProtectionProvider
    。使用
    DataProtectionProvider
    对身份验证cookie(以及会话cookie等)进行加密。从某种意义上说,这与在每个应用程序的web.config中设置相同机器密钥的老式方法有些相似,只是ASP.NET Core不使用web.config,也不使用机器密钥进行加密。相反,您需要确保它使用持久化密钥存储,每个应用都可以访问和使用该密钥存储,并且禁用应用隔离。我建议深入调查一下,以确保你已经很好地掌握了你正在处理的事情以及每件事情的运作方式