使用 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:

&lt;appSettings&gt;&lt;add key="WorkItemTrackingCacheRoot" value="C:\path-to-web-root\Cache\"/&gt;&lt;/appSettings&gt;

    确保您的 web.config 包含:

&lt;system.web&gt;&lt;identity impersonate="true" /&gt;&lt;/system.web&gt;

    打开 Windows 身份验证和模拟并禁用 IIS 身份验证中的所有其他内容:

解决方案 2

另一个避免上述步骤的解决方案是在 TFS:8080 站点下简单地运行您的应用程序,作为一个新应用程序。然后,当您在与您的应用调用的 Web 服务相同的上下文中运行时,会消除跃点问题。

创建一个新的应用程序池,使用网络身份。 确保您的应用程序已关闭匿名身份验证 确保它已打开 Windows 身份验证。 将&lt;identity impersonate="true" /&gt; 添加到网络配置中。

【讨论】:

有人试过解决方案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 添加工作项失败

ASP.NET MVC 1.0 AfterBuilding 视图在 TFS 构建上失败

SVN或TFS的部署解决方案

在 C#、asp.net、windows 身份中模拟