使用表单身份验证保护asp.net 4.0网站,并在远程SQL服务器上使用用户凭据

时间:2012-05-10 17:27:23

标签: asp.net authentication forms-authentication

这是我第一次尝试构建安全的Web应用程序。它将在互联网上,它包括一个IIS服务器(由ISP托管)和SQL 2008 db(也由ISP托管。

作为一个快速而肮脏的测试,我只是在Visual Studio中使用该模板。我只使用ASP.NET配置工具上的向导配置了身份验证。但是,这会创建一个隐藏在Web应用程序中的数据库。

我更希望将用户凭据保留在SQL服务器上,因为这似乎是允许可伸缩性的最佳做法。但是,我该怎么做?我对数据库的访问权限有限 - 我可以创建表,但不认为我能够在服务器上运行任何工具来创建正确的模式。谁能指出我正确的方向?做了一些谷歌搜索,但继续看到ASP.NET 1.1的文章,这让我觉得我可能会遗漏一些东西,并且有更好的方法在ASP.NET 4.0中这样做。

2 个答案:

答案 0 :(得分:2)

在SQL Server中创建一个用户表,用于存储用户登录名和密码。您可以对密码进行哈希处理,这样即使管理员本身(包括您自己)也无法看到密码。然后使用LINQ在表单身份验证期间提取以检查用户表的登录名/密码。

您也可以使用嵌入式SQL或存储过程代替LINQ。但是,嵌入式SQL非常不安全,因此离开存储过程和Linq。如果您熟悉Linq,我更愿意使用Linq。或者使用始终最安全的存储过程。

答案 1 :(得分:1)

您没有“必须”使用整个ASP.Net Membership框架来使用Forms身份验证。它为你做了很多管道工作(安全性等),所以如果可以的话,你可能最好使用它 - 如果你刚开始的话,那就更好了。

您可以将表单身份验证与您想要的任何身份验证方案一起使用(预先存在或您自己创建的内容)。这是一个overly simplistic sample,你可以看到你甚至可以对auth方案进行硬编码(你应该这样做,但它会告诉你可能性。)

最后,如果您无法运行命令行ASP.Net工具aspnet_regsql.exe,则用于创建架构的sql脚本位于:C:\Windows\Microsoft.NET\Framework\[Framework version]

对于.Net 4,它将是:C:\Windows\Microsoft.NET\Framework\v4.0.30319

安装和“卸载”sql脚本都在那里 - 例如。

  • InstallMembership.sql
  • UninstallMembership.sql

......依旧......