整体设计从 WebsiteASP.NET/IIS 上的表单或 Windows 身份验证开始。并以您想要/需要的应用程序和数据库身份验证结束。应用程序授权是另一个主题。我不会在这里讨论。
您实际上并未说明所需的身份验证模型。因此,我将从免责声明开始。这是我将在生产站点中使用的建议。但这不是最终的结局,也不是您可能考虑的唯一短期解决方案。
这是一个单人表演可以发挥作用的解决方案。并且是安全的,无需过多的管理工作即可继续运行。
通过 Windows Auth 使用 SQL Server 登录,
但您不需要将每个用户都添加到 SQL Server。
还有模拟的选项。但这可能会变得棘手,而且这种解释不是模仿。那是另一种方法。
首先确保网站正在使用 Windows 身份验证
将 IIS 设置为使用 Windows 身份验证:
现在你已经配置好IIS上网站后面的APP Pool了。.
我将建议在 APP 池中使用 Psuedo-service 用户作为开始的好方法。即WEBAPPLICATION_X_USER。每个 APP 池可以有一个单独的用户。每个用户只能访问其数据库。所以你得到应用程序分离。您在此处输入用户名和密码。IIS 将根据需要进行加密和解密。(比 Web.config 中的计划文本更好)
该用户应该在服务器本身上减少了身份验证。不是域上的管理员用户,甚至不是本地管理员。刚好可以使用 Sql server 创建数据库。 所以创建一个普通的windows用户
让 ASP.Net 登录到 DB。让 ASP.net 加密和解密密码。
所以现在的情况是 IIS 上的 Windows AUTH。IIS 有一个应用程序池,其中有一个可以登录到 SQL 服务器的特殊 Windows 用户。您已将此用户添加到 SQL 服务器实例并分配此服务用户创建数据库的能力。不要让用户访问所有 Dbs :-) 只是它将创建的一个。加上公共访问(通过 EF)。
验证您的WEB APP中的用户凭证情况。请参阅[System.Security.Principal.WindowsIdentity]
这应该显示您的 Windows 身份验证最终用户。
System.Environment.UserName 应该具有您放置在 IIS APP POOL 中的服务用户 ID。
现在,当 EF 在 SQL 服务器实例上创建或访问数据时,如果 WEB.CONFIG 条目设置为使用 windows 集成安全性,它将与 System.Environment.UserName 连接
<connectionStrings>
<add name="DbContextName" connectionString="Data Source=Your SQL server Instance;Initial Catalog=The DBNAME;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
而且您知道经过身份验证的用户。
httpContext会像thread current principal一样把它给你。HttpContext.User 默认映射到 {System.Security.Principal.WindowsPrincipal}
因此,您可以执行应用程序级别检查。同样的方法也应该适用于 Forms Authentication 。
警告:如果您有Windows WPF 方法(即您没有使用 IIS,因此没有 APP 池),则必须更改此方法并且更复杂,不再是最佳起点。
我希望这可以帮助您入门