0

我们在 ASP.Net Core webapp 中使用简单的 cookie 身份验证。登录已经工作了将近3个月。然后突然,一个问题开始出现。

这就是我在 Startup.cs 中设置身份验证的方式:

private void ConfigureAuthentication(IServiceCollection services)
{            
    var configurationService = services.BuildServiceProvider().GetRequiredService<IConfigurationService>();
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options => {                
        options.LoginPath = "/Identity/Login";
        options.AccessDeniedPath = "/Identity/AccessDenied";
        options.ExpireTimeSpan = TimeSpan.FromMinutes(double.Parse(configurationService.Get("CookieTimeout").Result.Value));
        options.LogoutPath = "/Identity/Logout";
    });

    services.AddAuthorization(options =>
    {
        options.AddPolicy("KeyUsers",
            authBuilder =>
            {
                authBuilder.RequireRole("KeyUsers");
            });
        options.AddPolicy("Admins",
            authBuilder =>
            {
                authBuilder.RequireRole("Admins");
            });
        options.AddPolicy("Users",
            authBuilder =>
            {
                authBuilder.RequireRole("Users");
            });
    });
}

这是我实际登录的方式:

var role = await _roleRepository.Read(user.RoleId);

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.UserId.ToString()),
    new Claim(ClaimTypes.Email, user.EmailAddress),
    new Claim(ClaimTypes.Name, user.CWID),
    new Claim(ClaimTypes.Role, role.Description)
};

ClaimsIdentity userIdentity = new ClaimsIdentity(claims, "login");
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);

await httpContext.SignInAsync(principal);

_logger.LogInformation("A user with the following cwid entered the correct password: {0}", cwid);

user.FailedLoginAttempts = 0;
await _userRepository.Update(user);


return LoginResult.Successful;

所以基本上,在用户输入正确的凭据后,我使用上面的代码登录。然后应该将它们重定向到登录用户的登录页面。这已经正常工作了 2-3 个月,但现在,由于某种原因,当他们到达登录页面时,他们会立即再次重定向到登录页面,这意味着他们实际上并没有登录。奇怪的是,我只有这个问题在一个浏览器(新 Edge)上,当我使用另一个(Chrome)尝试它时,它可以工作。所以我认为在浏览器中设置身份验证cookie的方式一定有问题,但我不确定。有什么想法吗?

4

0 回答 0