我有一个ASP.NET MVC4网页,大部分都是在没有身份验证的情况下访问的。有一个页面我想要保护以仅限管理员访问(特别是ELMAH的错误日志)。由于我只需要一次管理员登录,因此我想避免维护用户/密码数据库的复杂性。
我做了一些研究,并且我发现以前版本的ASP.NET提供了使用在web.config中加密的密码的表单身份验证的功能:
<forms loginUrl="Admin" name=".ASPXFORMSAUTH">
<credentials passwordFormat="SHA1">
<user name="admin" password="encryptedPassword" />
</credentials>
</forms>
然后,身份验证控制器使用FormsAuthentication.Authenticate
和FormsAuthentication.RedirectFromLoginPage
来验证输入的凭据。但是,我对使用此解决方案犹豫不决,因为:
FormsAuthentication.Authenticate
API现在是obsolete。FormsAuthentication.RedirectFromLoginPage
会直接重定向用户,而不是返回RedirectResult
。这不遵循MVC控制器管道,因此单元测试等事情会更加困难。通过查看MSDN示例和默认模板,WebMatrix的WebSecurity.Login
API似乎是在MVC应用程序中执行表单身份验证的新标准。但是,我还没有找到使用本地(即基于配置的)身份验证提供程序的方法。
是否有推荐的方式进行本地身份验证,或者这被视为不良做法?在没有外部依赖性的情况下提供管理员身份验证的最简单方法是什么?
答案 0 :(得分:1)
WebSecurity.Login
不是身份验证的“新标准”。它更像是新的“新手友好标准”。 WebSecurity只支持SimpleMembership,它实际上只是为简单的应用程序设计的。
FormsAuthentication.Authenticate
长期以来一直不是一个好的选择,所以它现在正式被弃用的事实并不是什么大问题。
您可能应该使用Membership,并使用Membership.ValidateUser来验证凭据。或者,使用像Windows Identity Foundation这样的东西。