ASP.NET Core 2 MVC基于Cookie的身份验证。还有更多选择吗?

时间:2018-01-31 20:09:32

标签: authentication asp.net-core-mvc asp.net-core-2.0

我使用基于Cookie的身份验证的ASP.NET Core 2 MVC项目。我在下面附上了代码。现在我没有任何问题,但我希望改进它或任何其他我需要探索的选项。更安全。我真的需要指导。 删除了一些不必要的代码。

问题:

1 - 我做得对吗还有什么需要补充的吗?

2 - 是否有更多身份验证选项。更安全吗?

成功完成凭据后

var result = await _signInManager.CheckPasswordSignInAsync(user, model.Password, false);
if (result.Succeeded)
{

    var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);
    identity.AddClaim(new Claim(ClaimTypes.Email, model.Email));
    identity.AddClaim(new Claim(ClaimTypes.Name, model.Email));

    identity.AddClaim(new Claim("Admin", "Admin"));
        identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));

    // Authenticate using the identity
    var principal = new ClaimsPrincipal(identity);
    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, new AuthenticationProperties { IsPersistent = false });

    if (Type == "Admin")
        return RedirectToAction(nameof(AdminController.Index), "Admin");

    return RedirectToAction(nameof(AccountController.Index), "Account");
}



services.AddAuthentication(options =>
{
    options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie();

services.AddAuthorization(options =>
{
    options.AddPolicy("admin-policy", x => { x.RequireClaim("Admin"); });
});

在控制器上

[Authorize]
[Authorize(Policy = "admin-policy")]

1 个答案:

答案 0 :(得分:0)

对于网站式应用程序,没有。 Cookie auth真的是你所拥有的最好的。 HTTP请求是幂等的。要访问受保护的端点,客户端(在本例中为Web浏览器)必须发送一些内容以及用于进行身份验证的请求,或者只是识别客户端已经过身份验证。这就是cookie的用武之地。还有其他方法可以做到这一点,但主要是浏览器并不真正支持这些工作流程。

对于不同的客户,特别是您可以控制请求格式化的客户,JWT可能是您最好的选择。但是,再次,这对您的Web浏览器没有帮助。但是,它确实意味着,对于诸如AJAX或HttpClient请求之类的东西,它可以无cookie,因为再次,你可以控制那里的标题。