我使用基于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")]
答案 0 :(得分:0)
对于网站式应用程序,没有。 Cookie auth真的是你所拥有的最好的。 HTTP请求是幂等的。要访问受保护的端点,客户端(在本例中为Web浏览器)必须发送一些内容以及用于进行身份验证的请求,或者只是识别客户端已经过身份验证。这就是cookie的用武之地。还有其他方法可以做到这一点,但主要是浏览器并不真正支持这些工作流程。
对于不同的客户,特别是您可以控制请求格式化的客户,JWT可能是您最好的选择。但是,再次,这对您的Web浏览器没有帮助。但是,它确实意味着,对于诸如AJAX或HttpClient
请求之类的东西,它可以无cookie,因为再次,你可以控制那里的标题。