是否可以在没有标准类和命名空间的情况下创建自己的身份验证
本文关键字:命名空间 情况下 创建 身份验证 自己的 标准 是否 | 更新日期: 2023-09-27 18:29:11
我已经创建了空白的Asp.Net-MVC 3 web应用程序,并希望编写自己的非常简单的身份验证。创建了一个数据库,其中将存储有关用户的所有信息。创建了一个控制器,带有登录和密码文本框的视图。所以现在用户打开我的网站,输入他的登录名和密码,这些信息就会在服务器上接收并处理(通过我自己的ValidateUser方法)。我应该在哪里存储有关该用户的信息以供进一步使用?
如果你不明白我想要什么,那么问题是:我可以在不使用标准MembershipRoles和MembershipProviders的情况下实现自己的身份验证过程吗?
您可以编写自己的自定义MemberShipProvider并调用自己的ValidateUser方法。
勾选此项实现会员提供商
如果你这样做,那么你可以使用这样的优势
- 如果未通过配置文件中的设置进行身份验证,则重定向到登录页
- 登录后,您可以使用返回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
怎么了?)