没有身份的ASP.NET Core 2.0 Cookie身份验证不指向LoginPath

时间:2018-02-12 16:31:52

标签: c# asp.net authentication asp.net-core

从ASP.NET Core 1.1迁移到2.0并且存在cookie身份验证问题。

该应用程序不会跟随LoginPath,而是直接转到AccessDeniedPath

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.LoginPath = new PathString("/Account/Login/");
            options.AccessDeniedPath = new PathString("/Account/Forbidden/");
        });

    services.AddAuthorization(options =>
    {
        options.AddPolicy(Constants.CONST_POLICY_SUPERADMIN, policy => policy.RequireRole(Constants.CONST_ROLE_SUPERADMIN));
        options.AddPolicy(Constants.CONST_POLICY_ADMIN, policy => policy.RequireRole(Constants.CONST_ROLE_ADMIN, Constants.CONST_ROLE_SUPERADMIN));
        options.AddPolicy(Constants.CONST_POLICY_DIR, policy => policy.RequireRole(Constants.CONST_ROLE_ADMIN, Constants.CONST_ROLE_SUPERADMIN, Constants.CONST_ROLE_DIR));
        options.AddPolicy(Constants.CONST_POLICY_HoD, policy => policy.RequireRole(Constants.CONST_ROLE_ADMIN, Constants.CONST_ROLE_SUPERADMIN, Constants.CONST_ROLE_DIR, Constants.CONST_ROLE_HoD));
        options.AddPolicy(Constants.CONST_POLICY_STAFF, policy => policy.RequireRole(Constants.CONST_ROLE_ADMIN, Constants.CONST_ROLE_SUPERADMIN, Constants.CONST_ROLE_DIR, Constants.CONST_ROLE_HoD, Constants.CONST_ROLE_STAFF));
    });
}

这根本不会重定向到登录方法。在测试时,我将AccessDeniedPath更改为指向Login方法,并将用户记录正确。

完全难以理解为什么LoginPath没有指向Login方法。

2 个答案:

答案 0 :(得分:0)

将[授权]添加到您希望强制重定向的控制器。

e.g。

using Microsoft.AspNetCore.Authorization;

 [Authorize]
public class HomeController : Controller
{ ....

答案 1 :(得分:0)

根据documentationConfigureServices中您需要的第一个是添加身份。类似的东西:

services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
    // Signin settings
    options.SignIn.RequireConfirmedEmail = true;
    options.SignIn.RequireConfirmedPhoneNumber = false;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();