提问人:Newbie 提问时间:8/12/2023 最后编辑:Newbie 更新时间:8/14/2023 访问量:66
还有哪些其他方法可以对用户/页面进行身份验证和授权?
What are other ways to Authenticate and authorize users/page?
问:
有多种方法可以对用户进行身份验证/授权。我看了一下 Oauth、基于令牌和身份认证,我不喜欢它们中的任何一个。我最终做的是,当我让用户登录时,我会运行一个 SQL 过程,或者针对我的 Dbcontext 运行它,当用户成功登录时,我会将会话变量设置为 true。我完全理解所有其他授权/身份验证方法,但我觉得我想更多地拥有代码。
所以我的主要问题是,下面的代码有多安全?或者,如果我想“手动”完成,还有哪些其他安全的方法?
仅允许授权用户的页面
if (HttpContext.Session.GetString(isAuthenticated) == true ) // authorized users only page
{
Response.Redirect("Login");
}
登录将如下所示
public IActionResult OnPost()
{
var user = _context.UsersTableTest.FirstOrDefault(u => u.UserName == Username);
if (user != null && user.PasswordHash == Password)
{
// Successful login logic
HttpContext.Session.SetString("IsAuthenticated", "true");
return RedirectToPage("/Index"); // Redirect to a protected page
}
else
{
ModelState.AddModelError("", "Invalid login attempt.");
return Page();
}
}
布局中类似这样的东西
@if (isAuthenticated == "true")
{
<div>
<form method="post" asp-page-handler="Logout" class="form-inline">
<button type="submit" class="btn btn-link text-dark">Logout</button>
</form>
</div>
}
else
{
<div>
<a class="btn btn-primary" asp-area="" asp-page="/Login">Login</a>
</div>
}
答:
0赞
Manoj Agrawal
8/14/2023
#1
您正在采用的方法(即使用会话变量和自定义数据库检查手动管理用户身份验证和授权)可以工作,但需要检查几个安全问题:
- 在数据库中存储普通密码是有风险的。使用强加密方法来保护密码。
- 安全地管理会话对于防止未经授权的访问和攻击至关重要。
- 实施防止重复登录尝试(暴力攻击)的保护措施。
- 构建自己的身份验证意味着您需要自己跟上安全更新。
- DIY 身份验证可能很复杂,并可能导致安全疏忽。
- 自定义方法可能不符合行业标准,使其他人更难理解您的代码。
- 考虑使用 JWT 进行更多控制,同时仍遵循既定标准。
平衡控制和安全性非常重要。确保您没有引入可能危及用户数据或应用程序安全性的漏洞。
评论