FormsAuthentication对象已过时[使用MVC5]



我在MVC5站点中使用以下代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel loginModel) {
if (ModelState.IsValid) {
var authenticated = FormsAuthentication.Authenticate(loginModel.UserName, loginModel.Password);
if (authenticated) {
FormsAuthentication.SetAuthCookie(loginModel.UserName, true);
return RedirectToAction("AdminPanel");
}
ModelState.AddModelError("", "The username and password combination were incorrect");
}
return View(loginModel);
}

它会发出以下警告:

System.Web.Security.FormsAuthentication.Authenticate(string,string)'已过时:'推荐的替代方案是使用MembershipAPI,如Membership.ValidateUser。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=252463.'

首先是一个免责声明-我是那些喜欢了解最新情况的开发人员之一,我更喜欢完全避免VS中的警告。然而,在这个特定的实例中,我使用的是非常原始的身份验证,它直接来自web.config,如下所示:

<authentication mode="Forms">
<forms loginUrl="~/account/login" timeout="2880" slidingExpiration="true" name=".ASPXFORMSAUTH">
<credentials passwordFormat="SHA1">
<user name="MyUserName" password="a-big-long-password-hash"/>
</credentials>
</forms>
</authentication>

在这个项目中绝对没有进一步的登录要求——使用数据库是过度的,并且不需要分布式登录;基本上,将详细信息存储在web.config中是最理想的解决方案,并且每个应用程序可能只有一个用户。毫无疑问,我将从控制器中提取身份验证代码(使用DI/IoC),但我仍然打算使用FormsAuthentication对象根据web.config中的详细信息进行身份验证。

虽然我完全了解会员资格提供商、DotNetOpenAuth和新的(但相当可怕的imo)基于OWIN的身份验证模型,但上面的代码已经足够了。

第一个问题-当FormsAuthentication是一个完全有效的用例时,为什么它已经过时了?我知道FormsAuthentication是一个密封的黑盒,很难测试,它背后的代码是特定于域的,但在这个特定的例子中(我想直接从web.config部分阅读详细信息),编写会员资格提供商或自定义身份验证服务似乎很疯狂?

第二个问题-除非我遗漏了什么,否则新的OWIN模型是用于分布式身份验证的,不适合基于角色的企业级安全系统。从我读过的许多博客文章、白皮书和SO文章来看,它似乎仍然不完整。我的假设正确吗?OWIN是所有安全系统的未来,还是我应该继续编写更适合客户需求的定制安全系统?

关于您的第一点,我们已经弃用了它,因为它远远不符合现代安全标准。它使用了一个没有迭代的直接散列,这意味着任何访问Web.config的人都可以很容易地弄清楚原始密码是什么。但如果你愿意接受这些风险,你肯定可以继续使用它。只需抑制警告并使用原始代码进行巩固即可。

关于你的第二点,这与OWIN之间没有任何关系。

希望这一切都能解决!

OWIN不仅仅是关于安全性。它是一个定义应用程序框架(ASP.NET MVC)和web服务器(IIS)之间接口的标准。它是微软定义的一个新的抽象层,让.NET开发人员编写与主机无关的应用程序,即不依赖IIS。

OWIN体系结构是一个由多个中间件组件组成的管道。在MVC5中,安全性被从头开始重写为OWIN中间件组件。如果这对您不起作用,并且您想推出自己的密码验证例程,则可以实现自己的安全中间件。这是一篇描述如何做到这一点的帖子。

如果你不想走那么远,这篇文章展示了如何在没有会员的情况下依赖内置的身份验证框架

李维提到的一切仍然有效。您需要小心使用自己的哈希/存储机制,并选择一个好的哈希算法。

这里有一些关于微软实现的OWIN安全中间件的更多背景信息。

最新更新