双跳与 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的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.Net 网站项目中混合 VB.Net 和 C# 代码?