首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现ASP.Net模拟/委托,从ASP.Net服务器连接到远程Server

实现ASP.Net模拟/委托,从ASP.Net服务器连接到远程Server
EN

Stack Overflow用户
提问于 2018-03-26 15:28:22
回答 1查看 2.8K关注 0票数 0

我正在尝试使用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服务器配置:

  • 在web.config文件中:
代码语言:javascript
复制
- `Authentication mode = Windows`
- `Identity impersonate = True`
- `validation validateIntegratedModeConfiguration = False`
- `Integrated security = SSPI`

  • 在IIS管理器中:
代码语言:javascript
复制
- `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
代码语言:javascript
复制
- 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配置

  • 我没有在这里设置任何东西。我假设ASP.NET将使用登录在web应用程序中的用户的凭据来访问Server数据库。
  • 编辑:Server服务帐户:test\my-svc-account

结果:

  • 如果我不在web应用程序中使用模拟,并且使用在Server中创建的定义用户/pwd登录名,我的应用程序将正常工作,如果需要,我可以获得Windows用户凭据。
  • 使用模拟,当我打开web应用程序页面:Login failed for user 'TEST\test-iis-server$'时,会得到一个Server连接错误。

预期行为:

  • web应用程序将使用用于登录到“测试客户端”机器的凭据登录到Server。

我读过很多关于如何为我的解决方案实现模拟/委托的文章,但似乎找不到问题所在。有谁知道这个问题从何而来,以及我如何解决它?

编辑#1:

  • 据我所读,我似乎需要设置SPN。我很困惑如何为我的双跳场景正确地设置它们。
  • 我已在Active Directory中创建了一个用户帐户,以充当服务帐户。我已经把这个帐户设置为委托信任。
  • 我将此帐户用作IIS中应用程序池的标识,并用作Server实例的服务帐户。
EN

回答 1

Stack Overflow用户

发布于 2018-04-03 17:48:02

是的,您确实需要为ASP.NET应用程序池标识和Server服务帐户配置SPN。

这是相对简单的,但您需要确保得到正确的值。

在AD中,用户和计算机找到‘my帐户’帐户并打开属性。导航到属性编辑器选项卡(如果您没有看到它,请通过ADUC 'View‘菜单启用高级功能)。找到servicePrincipalName属性并编辑它。增加以下内容:

http/servicename.foo.com http/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.com MSSQLSvc/sqlserver <==可选

这需要是Server主机的FQDN。

最后,您需要在App标识和Server服务帐户之间启用受限的委托。这是委托控制中的第三个单选按钮。添加Server作为委托目标。

重新启动IIS和SQL。尝试浏览应用程序。现在,您应该看到它作为您的命名用户连接到SQL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49495171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档