【发布时间】:2020-02-24 17:23:09
【问题描述】:
我目前正在为我的公司开发一个 Intranet 门户,它将保留在内部,只有在我们域中拥有帐户的用户才能访问它。目前,我使用表单身份验证方法,并使用System.DirectoryServices 针对 Active Directory 域对用户进行身份验证。我还使用System.DirectoryServices.AccountManagement 询问 AD,以根据用户所属的 Active Directory 组管理访问权限,并将一些数据存储在用户会话中,一切正常。
我被要求研究是否可以在我们的上下文中实施单点登录,我们所有的用户都在 RDS 中工作,无一例外,所以他们始终处于经过身份验证的会话中,而上级更愿意不必签名在所有。至于重写代码以验证和授权用户,如here 和here 所述 我不太担心。
我在一个空白的 ASP.Net MVC5 项目上尝试了所有方法,并在其中添加了一个具有集成安全性的 ADO.Net 模型。我的开发 SQL Server 托管在远程服务器(不是开发桌面)上,同一台服务器还托管开发 IIS 服务器。在生产中,这两个服务都将位于不同的服务器上。只要我在桌面上进行本地调试,它就可以正常工作,但是一旦我发布到 IIS 服务器,我遇到了第一个障碍,无法摆脱它。
当我更改 IIS 应用程序中的设置以禁用匿名并启用 Windows 身份验证时,IIS 自动将 web.config 文件 (as suggested here) 中的 <authentication mode="Forms" /> 更改为 <authentication mode="Windows" />,但我无法使其与Integrated Security=True 或 Integrated Security=SSPI,我收到一个错误页面,上面写着 [SqlException (0x80131904): Login failed for user 'DOMAIN\MACHINE$'.]。
连接字符串如下:<add name="ASPNetProjectEntities" connectionString="metadata=res://*/Models.ModelASPNetProject.csdl|res://*/Models.ModelASPNetProject.ssdl|res://*/Models.ModelASPNetProject.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE;initial catalog=DATABASE;persist security info=True;Integrated Security=SSPI;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
我尝试将机器帐户 DOMAIN\MACHINE$ 添加到 SQL 登录并授予它对数据库的权限,但没有骰子。我尝试在服务器 AD 帐户中授权委派并激活身份模拟,但这也不起作用。如果我在连接字符串中放入一个 SQL 用户/密码,我只能让它在远程 IIS 服务器上工作。
所以我不知道这里可能缺少什么使其与集成安全性一起使用。还是我必须将 SQL 凭据放入连接字符串并在 IIS 上对其进行加密?
【问题讨论】:
标签: asp.net sql-server iis