整体设计从 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 Server 实例上创建或访问数据时,它将与
System.Environment.UserName 如果 WEB.CONFIG 条目设置为使用 windows 集成安全性
<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}
因此您可以执行应用程序级别检查。
同样的方法也应该适用于表单身份验证。
警告:如果您有 windows WPF 方法(即您没有使用 IIS,因此没有 APP 池),则必须更改此方法并且更复杂且不再是最好的起点。
我希望这可以帮助您入门