首页 > 解决方案 > 当用户使用 ASP.NET Core Identity 登录网站时,他在访问该网站的所有浏览器中都已登录

问题描述

我有一个 ASP.NET Core 2.2 应用程序在 Azure App Services 的 B1 实例中运行。如果我登录该网站,并在另一台机器上打开它,我也登录了该机器,包括访问受授权保护的所有页面。当我在第二台机器上注销时,我不会自动重新登录,直到我清除浏览器缓存并重新启动浏览器。

此处描述了一个类似的问题,但从未真正得到解答:ASP.NET Core identity shared across browser

这种行为似乎与在 Azure 应用服务 (Linux) 中运行有关。我之前在普通 Linux VM(Ubuntu 18.04,官方 MS Docker 映像)上的 Docker 映像中运行了该站点,并且没有遇到这个问题。

以下是 Startup.cs 中可能相关的所有代码:

public void ConfigureServices(IServiceCollection services)
        {
[...]
 services.Configure<CookiePolicyOptions>(
                options =>
                {
                    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                    options.CheckConsentNeeded = _ => false;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });
[...]
services.AddIdentity<User, IdentityRole>()
                .AddErrorDescriber<TopikonIdentityErrorDescriber>()
                .AddEntityFrameworkStores<TopikonContext>()
                .AddDefaultTokenProviders();
            services.AddAuthentication();
            services.AddAuthorization(
                options =>
                {
                    options.AddPolicy(
                        TopikonPolicies.ControlPanel,
                        policy => policy
                            .RequireRole(TopikonRoles.ControlCenterAccess));                    
                });

services        .AddMvc()                
                .AddRazorPagesOptions(
                    options =>
                    {
                        options.AllowAreas = true;
                        options.Conventions.AuthorizeFolder("/");                       
                    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

[...] }

public static void Configure(IApplicationBuilder app, IHostingEnvironment env){
[...]
app.UseCookiePolicy();
app.UseAuthentication();
app.UseSession();
app.UseMvc();
}

应用服务身份验证已打开并设置为“允许匿名”。我试着关掉它,但结果是一样的。我希望用户只在他们正在使用的机器上登录,而不是向访问该站点的每个人提供他们的登录信息。不幸的是,我不太确定在哪里寻找答案。

标签: c#asp.net-coreasp.net-identityazure-web-app-service

解决方案


推荐阅读