我按照Microsoft的本文(https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x)将我的身份验证过程迁移到了.NET Core 2.0 MVC应用程序中。

Startup.cs(ConfigureServices)

services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

services.AddAuthentication("MyCookieAuthenticationScheme")
        .AddCookie("MyCookieAuthenticationScheme", options => {
            options.AccessDeniedPath = "/Account/Forbidden/";
            options.LoginPath = "/Account/Login/";
        });

Startup.cs(配置)
app.UseAuthentication();

AccountController.cs
List<Claim> claims = new List<Claim> {
                        new Claim(ClaimTypes.Name, "testUser"),
                        new Claim(ClaimTypes.Email, model.Email),
                        //new Claim("ID", user.ID.ToString(), ClaimValueTypes.Integer),
                        new Claim(ClaimTypes.Role, "Admin")
                    };

ClaimsIdentity identity = new ClaimsIdentity(claims, "MyCookieAuthenticationScheme");

ClaimsPrincipal principal = new ClaimsPrincipal(identity);

await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal, new AuthenticationProperties
{
    IsPersistent = false
});

不幸的是,我的.NET Cookie从未设置。这意味着User.Identity.IsAuthenticated始终为false。我尝试了许多cookie选项,例如将Cookie.SameSite或Cookie.SecurePolicy更改为所有可能的值。

我使用Visual Studio 2017,通过https的localhost,Chrome 61。

最佳答案

假设您正在localhost上提供应用程序,似乎Chrome browser不会为IP或Intranet主机名(如localhost)设置cookie。您可以从IIS服务您的应用程序,并使用具有有效主机名的绑定(bind)。

关于c# - 未设置ASP.NET Core 2.0身份验证Cookie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46805221/

10-17 02:33