使用 ASP.NET 和 TFS api 的直通(模拟)身份验证
Posted
技术标签:
【中文标题】使用 ASP.NET 和 TFS api 的直通(模拟)身份验证【英文标题】:Passthrough (impersonation) authentication with ASP.NET and TFS api 【发布时间】:2011-04-30 02:38:41 【问题描述】:我正在尝试在使用 TFS2010 API 的 ASP.NET 网站内启用直通或模拟身份验证。
我在 Cassini 中可以正常工作,但是在 IIS 7.5 (Windows 7) 中出现了问题。
我在这个主题上找到了this blog post,并尝试了以下方法:
private static void Test()
TfsTeamProjectCollection baseUserTpcConnection =
new TfsTeamProjectCollection(new Uri(Settings.TfsServer));
// Fails as 'baseUserTpcConnection' isn't authenticated
IIdentityManagementService ims =
baseUserTpcConnection.GetService<IIdentityManagementService>();
// Read out the identity of the user we want to impersonate
TeamFoundationIdentity identity = ims.ReadIdentity(
IdentitySearchFactor.AccountName,
HttpContext.Current.User.Identity.Name,
MembershipQuery.None,
ReadIdentityOptions.None);
TfsTeamProjectCollection impersonatedTpcConnection = new
TfsTeamProjectCollection(new Uri(Settings.TfsServer),
identity.Descriptor);
当我使用 Cassini 时,除此之外什么都不需要
collection = new TfsTeamProjectCollection(new Uri(server));
我已启用 web.config 设置(并安装了 Windows Auth 模块):
<authentication mode="Windows"/>
<identity impersonate="true" />
我错过了什么明显的东西吗?
【问题讨论】:
【参考方案1】:我想知道您是否在这里遇到了旧的Double-Hop 问题?
【讨论】:
很可能是双跳。 我是,但 2010 年的新 API 旨在解决这个问题(测试方法) 除非您部署 Kerberos,否则不会“绕过”双跳问题。您的解决方案在 Cassini 中有效,因为 Web 开发服务器以“您”的身份运行,而 IIS 以服务帐户的身份运行。 你得到了我的投票,但我很迂腐,说这是原因而不是解决方案 :) 从阅读那篇文章来看,配置 kerberos 委托对于我的应用程序来说并不是一件容易的事。 从记忆中开始(几年前)-我认为它只是针对 AD 中的服务器的设置(委托信任?)-假设您的网络已经在运行 Kerberos-如果不,为什么不;o)【参考方案2】:解决方案 1
这是委托方法。正如 Paul 指出的,这是您活动目录中的一个设置:
在“Active Directory 用户和计算机”控制台的计算机节点中找到 IIS 服务器。
单击委托选项卡,然后选择第二个选项:
在 IIS 根文件夹中创建一个“缓存”目录
将以下内容添加到您的 web.config:
<appSettings>
<add key="WorkItemTrackingCacheRoot" value="C:\path-to-web-root\Cache\"/>
</appSettings>
-
确保您的 web.config 包含:
<system.web>
<identity impersonate="true" />
</system.web>
-
打开 Windows 身份验证和模拟并禁用 IIS 身份验证中的所有其他内容:
解决方案 2
另一个避免上述步骤的解决方案是在 TFS:8080 站点下简单地运行您的应用程序,作为一个新应用程序。然后,当您在与您的应用调用的 Web 服务相同的上下文中运行时,会消除跃点问题。
创建一个新的应用程序池,使用网络身份。 确保您的应用程序已关闭匿名身份验证 确保它已打开 Windows 身份验证。 将<identity impersonate="true" />
添加到网络配置中。
【讨论】:
有人试过解决方案2吗?我无法解决问题。 我刚做了,你还需要将Managed Pipeline Mode设置为classic。以上是关于使用 ASP.NET 和 TFS api 的直通(模拟)身份验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 .NET 4.6 和 ASP.NET Core 的 TFS 2017 构建定义
在 TFS 2010 构建服务器中预编译 asp.net MVC 网站
由于权限问题,从 ASP.NET 应用程序向 TFS 2010 添加工作项失败