我正在尝试使用ASP.NET 4.5/ Server 2016为web应用程序设置模拟/委托。目标是在web应用程序和Server上使用Windows身份验证。
我在Azure上复制了一个类似于将用于生产的设置,但我似乎找不到是什么使模拟不起作用。
Azure VM #1机器名: test- IIS - Server :Windows 2012,运行IIS8.5并充当Active域控制器
Azure VM #2机器名称: test- SQL - Server :运行Server 2016的Windows 2016
Azure VM #3机器名称: test-client:Windows 10机器,用于模拟用户连接到网站
我创建了一个名为TEST的Active域。可以用Active Directory中创建的用户连接到这3台计算机。
IIS服务器配置:
- `Authentication mode = Windows`
- `Identity impersonate = True`
- `validation validateIntegratedModeConfiguration = False`
- `Integrated security = SSPI`
- `Windows authentication = Enabled` (`Kernel-mode authentication = Disabled`, `Providers = Negotiate:Kerberos`)
- `ASP.NET Impersonation = Enabled`
- Application pool = `Integrated Managed Pipeline` (`Identity = Custom Identity: test\my-svc-account`)
Active Directory Users & Computers中- For each computers (web server, sql server and user computer), I went into Properties and checked in the `Delegation` tab `Trust this computer for delegation to any service (Kerberos only)`.
Server配置
test\my-svc-account结果:
Login failed for user 'TEST\test-iis-server$'时,会得到一个Server连接错误。预期行为:
我读过很多关于如何为我的解决方案实现模拟/委托的文章,但似乎找不到问题所在。有谁知道这个问题从何而来,以及我如何解决它?
编辑#1:
发布于 2018-04-03 17:48:02
是的,您确实需要为ASP.NET应用程序池标识和Server服务帐户配置SPN。
这是相对简单的,但您需要确保得到正确的值。
在AD中,用户和计算机找到‘my帐户’帐户并打开属性。导航到属性编辑器选项卡(如果您没有看到它,请通过ADUC 'View‘菜单启用高级功能)。找到servicePrincipalName属性并编辑它。增加以下内容:
http/servicename.foo.comhttp/servername<==可选
其中service.foo.com与您的DNS名称匹配。如果这是一个CNAME,您还需要包括底层的A记录名称。因此,如果servicename.foo.com映射到whatever.cloudapp.net,则需要为whatever.cloudapp.net添加一个SPN。这是为IE,因为IE是...dumb.并试图变得聪明(它将DNS解析为最低命名记录,并为此请求SPN )。
然后对Server服务帐户执行相同的操作。
MSSQLSvc/sqlserver.foo.comMSSQLSvc/sqlserver<==可选
这需要是Server主机的FQDN。
最后,您需要在App标识和Server服务帐户之间启用受限的委托。这是委托控制中的第三个单选按钮。添加Server作为委托目标。
重新启动IIS和SQL。尝试浏览应用程序。现在,您应该看到它作为您的命名用户连接到SQL。
https://stackoverflow.com/questions/49495171
复制相似问题