[英]Double hop IIS to SQL Server authentication works locally, doesn't work remotely
关于双跳认证浏览器的问题 -> IIS (ASP.NET WebForms app) -> SQL 服务器。
我有一个带有 Web.config 的 WebForms 网站,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="devExpress">
...some DevExpress settings here...
</sectionGroup>
</configSections>
<connectionStrings>
<add name="ConnStringName" connectionString="Data Source=SERVER_NAME;Initial Catalog=DB_NAME;Trusted_Connection=Yes;Integrated Security=SSPI;Persist Security Info=False;Connect Timeout=0" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<identity impersonate="true" />
...
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
...
<httpRuntime maxRequestLength="4096" requestValidationMode="4.0" executionTimeout="110" targetFramework="4.5.2" />
<pages validateRequest="true" clientIDMode="Predictable">
...
</pages>
<sessionState mode="InProc" timeout="60"></sessionState>
</system.web>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="Default.aspx" />
</files>
</defaultDocument>
...
<validation validateIntegratedModeConfiguration="false" />
...
</configuration>
I need it to work like this: when any user in domain opens site in browser, ASP.NET Web Forms application runs under his Windows credential. 然后必须使用相同的凭据来验证 ASP.NET 应用程序使用 SqlConnection class 进行的数据库调用。
为清楚起见: SQL 服务器配置为使用 Windows 身份验证。 必须有权访问应用程序和数据库的用户包含在特定的 AD 组中。 该组列在 DB 的 Security - Logins 列表中,具有 data_reader、data_writer 权限(并且它们还可以执行存储的过程)。
最有趣的是它是如何工作的:
#1。 当我在打开 IIS 的服务器上打开浏览器时,输入 http://localhost:port/ - 它按预期工作。
#2。 当我在 PC 上打开浏览器时,键入 http://server-name:port/ - 它会捕获 SqlConnection 打开错误:
System.Data.SqlClient.SqlException
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
在这两种情况下,Context.User.Identity.Name 和 WindowsIdentity.GetCurrent().Name 都是正确的。
为什么这两种情况会给出不同的结果? 如何使#2 像#1 一样工作?
由于这是一个双跳身份验证方案,您必须启用Kerberos 约束委派。 参见例如在 IIS 中为网站设置 Kerberos 身份验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.