是否可以在没有标准类和命名空间的情况下创建自己的身份验证

本文关键字:命名空间 情况下 创建 身份验证 自己的 标准 是否 | 更新日期: 2023-09-27 18:29:11

我已经创建了空白的Asp.Net-MVC 3 web应用程序,并希望编写自己的非常简单的身份验证。创建了一个数据库,其中将存储有关用户的所有信息。创建了一个控制器,带有登录和密码文本框的视图。所以现在用户打开我的网站,输入他的登录名和密码,这些信息就会在服务器上接收并处理(通过我自己的ValidateUser方法)。我应该在哪里存储有关该用户的信息以供进一步使用?

如果你不明白我想要什么,那么问题是:我可以在不使用标准MembershipRoles和MembershipProviders的情况下实现自己的身份验证过程吗?

是否可以在没有标准类和命名空间的情况下创建自己的身份验证

您可以编写自己的自定义MemberShipProvider并调用自己的ValidateUser方法。

勾选此项实现会员提供商

如果你这样做,那么你可以使用这样的优势

  1. 如果未通过配置文件中的设置进行身份验证,则重定向到登录页
  2. 登录后,您可以使用返回url重定向回用户所在的同一页面

当然可以,问题第一部分的答案是"取决于情况"。这取决于你想如何/何时使用它。

内置身份验证将令牌存储在用于重新身份验证的cookie中。

作为一个警告——你需要一个很好的理由来自己实现这一点——很容易出错,并在你的网站上留下漏洞。

在您将登录表单张贴到的控制器操作中,您可以根据数据库验证凭据,如果成功,则会发出一个身份验证cookie,其中将包含当前连接用户的用户名,以便您可以在后续操作中检索它。

例如,假设您有一个包含用户名和密码字段的表单,该表单将发布到LogOn方法:

[HttpPost]
public ActionResult LogOn(string username, string password)
{
    // TODO: up to you to implement the VerifyCredentials method
    if (!VerifyCredentials(username, password))
    {
        // wrong username or password:
        ModelState.AddModelError("", "wrong username or password");
        return View();
    }
    // username and password match => emit an authentication cookie:
    FormsAuthentication.SetAuthCookie(username, false);
    // and redirect to some controller action which is protected by the
    // [Authorize] attribute and which should be accessible only to 
    // authenticated users
    return RedirectToAction("SomeProtectedAction", "SomeController");
}

在受保护的操作中,您可以从cookie中获取当前连接的用户名,如下所示:

[Authorize]
public ActionResult SomeProtectedAction()
{
    string username = User.Identity.Name;
    // TODO: here you could query your database to find out more about 
    // the user given his username which must be unique
    ...
}

是的,这是完全可能的(我们在这里不使用forms-auth)。

但是;您需要对所有负全部责任,包括:

  • 身份验证
  • 针对用户安全地存储/处理某些令牌(通常是http专用cookie)
  • 根据资源验证令牌/用户
  • 使令牌无效(防止重播或注销)
  • 所有与此相关的缓存
  • 任何出错的事情(包括但不限于糟糕的实现暴露出关键的安全故障)都是您的错

当然是可以实现的,但需要有充分的理由和谨慎地去做。

?admin=true怎么了?)