双跳与 ASP.Net 网站和 NHibernate

Posted

技术标签:

【中文标题】双跳与 ASP.Net 网站和 NHibernate【英文标题】:Double Hop with ASP.Net website and NHibernate 【发布时间】:2012-06-24 09:41:01 【问题描述】:

背景:

ASP.Net MVC 网站。托管在 IIS7、Intranet 上。

数据库:SQL Server。通过 NHibernate 访问。 在连接字符串中,访问权限设置为Integrated Security: SSPI。 (对 DB 的权限基于 Active-Directory。)

简而言之,这是典型的双跳情况, 我需要将客户端的凭据传递给 IIS,并从 IIS 传递给 SQL Server。

问题:

问题是黄屏死机,报错:Login failed for user 'MyDomain\UserThatRunsAppPool'.

我尝试解决问题的方法:

将身份验证配置为仅启用 Windows 身份验证ASP.NET 模拟 将 Windows 身份验证 Provider 设置为 Negotiate:Kerberos (禁用内核模式身份验证后) 确保将 UserThatRunsAppPool 的委派设置为: Active Directory 中的“Trust the user for delegation to any service (Kerberos only)” 从 Application_BeginRequest() 移动 NHibernate SessionFactory 创建 到Session_Start()

我在尝试解决问题方面取得了多大的成功:

一点也不。


编辑: 我还尝试将 IIS 服务器的委托设置为“Trust the user for delegation to any service (Kerberos only)”(在 Active Directory 中)。

【问题讨论】:

【参考方案1】:
In short, this is a typical double-hop situation,
where I need to pass client's credentials to IIS, and from IIS to SQL Server.

您遇到了“委托”问题。如果您想保持清醒,请将连接字符串更改为使用 SQL 用户名 + 密码而不是 SSPI。

如果您在调试和与域管理员争吵两周后感到沮丧,请阅读Fun with the Kerberos Delegation Web Site。

【讨论】:

如果他的MyDomain\UserThatRunsAppPool 登录失败,这意味着该调用不会模拟 HTTP 调用者。只有之后,一旦他成功修复了模拟,委托的乐趣才会开始。

以上是关于双跳与 ASP.Net 网站和 NHibernate的主要内容,如果未能解决你的问题,请参考以下文章

IIS - 部署 ASP.NET 网站和数据库连接

在 ASP.Net 网站项目中混合 VB.Net 和 C# 代码?

EBGP的多跳与验证命令。

如何将 ASP.NET 网站转换为 ASP.NET Web 应用程序

调试运行缓慢的 ASP.NET 网站?

ASP.NET 如何授权网站