Asp.Net MVC 6 饼干身份验证 - 授权失败

本文关键字:授权 失败 身份验证 饼干 Net MVC Asp | 更新日期: 2023-09-27 18:34:57

我正在尝试使用 Cookie 中间件身份验证创建 asp.net 核心 mvc 6 应用程序。我的代码编译没有错误,但即使在成功登录后我也不是授权用户

这是我的启动.cs配置

        app.UseCookieAuthentication(options =>
        {
            options.AuthenticationScheme = "CookieAuth";
            options.LoginPath = new PathString("/Account/Login/");
            options.AccessDeniedPath = new PathString("/Account/Login/");
            options.AutomaticAuthenticate = true;
            options.AutomaticChallenge = true;
        });

还有我的控制器中的登录操作:

   public async Task<IActionResult> Login(LoginViewModel model)
    {
        User foundUser = _userManager.findUser(model.UserName, model.Password);

        if (foundUser != null)
        {
            List<Claim> userClaims = new List<Claim>
            {
                new Claim("userId", Convert.ToString(foundUser.UserID)),
                new Claim(ClaimTypes.Name, foundUser.UserName),
                new Claim(ClaimTypes.Role, Convert.ToString(foundUser.RoleID))
            };
            ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims));
            await HttpContext.Authentication.SignInAsync("CookieAuth", principal);

            return RedirectToAction("Index", "Dashboard");
        }
        return View();
    }

最后是仪表板/索引操作

[Authorize]
public IActionResult Index()
{
    return View();
}

我在登录操作中放置了一些断点,一切似乎都很好。饼干也设置正确。

现在我不知道登录后无法进入仪表板/索引的方法。每次由于配置设置,我都被重定向到/帐户/登录/

我做错了什么?

Asp.Net MVC 6 饼干身份验证 - 授权失败

在登录名中构造ClaimsIdentity时,需要使用指定authenticationType的其他构造函数。

而不是

ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims));

你应该做:

ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims, "local"));

现在可以创建具有声明的 ClaimIdentity,但是 将"已验证"设置为"假"。实际上这是现在的默认设置...

若要将 IsAuthenticated 设置为 true,需要指定身份验证类型

我从Dominick Baier的博客中得到了这些信息。

这里还有一个使用cookie中间件的很好的例子,也是(传奇的(Dominick Baier/minimumprivilege。

编辑:

此答案包含有关authenticationType字符串应使用的内容的详细信息。