还有哪些其他方法可以对用户/页面进行身份验证和授权?

What are other ways to Authenticate and authorize users/page?

提问人:Newbie 提问时间:8/12/2023 最后编辑:Newbie 更新时间:8/14/2023 访问量:66

问:

有多种方法可以对用户进行身份验证/授权。我看了一下 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>
                    }
C# SQL asp.net ASP.NET 标识 razor-pages

评论

0赞 montonero 8/12/2023
我强烈建议不要发明自己的身份验证,而是使用人们为您考虑过的东西。
0赞 Newbie 8/13/2023
听起来不错,谢谢。我最终使用了 Cookie Auth,它为我将要进行的任何新实现提供了良好的灵活性,同时将一切安全保持在良好的水平。

答:

0赞 Manoj Agrawal 8/14/2023 #1

您正在采用的方法(即使用会话变量和自定义数据库检查手动管理用户身份验证和授权)可以工作,但需要检查几个安全问题:

  1. 在数据库中存储普通密码是有风险的。使用强加密方法来保护密码。
  2. 安全地管理会话对于防止未经授权的访问和攻击至关重要。
  3. 实施防止重复登录尝试(暴力攻击)的保护措施。
  4. 构建自己的身份验证意味着您需要自己跟上安全更新。
  5. DIY 身份验证可能很复杂,并可能导致安全疏忽。
  6. 自定义方法可能不符合行业标准,使其他人更难理解您的代码。
  7. 考虑使用 JWT 进行更多控制,同时仍遵循既定标准。

平衡控制和安全性非常重要。确保您没有引入可能危及用户数据或应用程序安全性的漏洞。