【问题标题】:Make Changes to a TFS Work Item as a specific user以特定用户身份更改 TFS 工作项
【发布时间】:2015-04-30 20:41:32
【问题描述】:

我正在创建一个 Web 应用程序,我的团队中的用户将使用它 对 TFS 工作项进行更改。我正在为此使用 TFS API..

为了访问 TFS 服务器,我在 Web 应用程序中使用了我的凭据。

现在,每次有人使用该应用程序并对 TFS 工作项进行更改时,它都会显示 好像我在应用程序中使用了我的凭据后对这些项目进行了更改。

有没有一种方法可以使用登录我的应用程序的人的凭据在 TFS 上显示为进行更改的人?

【问题讨论】:

  • 让网络应用程序使用 Windows 身份验证并在 API 调用中模拟该用户? (不太了解 TFS API 或您的设置,但假设您使用的是 Windows 帐户,您应该能够传递凭据)
  • 你试过HttpContext.Current.User吗?
  • 你为什么不使用 TFS 自带的 web 界面你不是在这里重新发明轮子..?
  • @DJ KRAZE .. 是的,我知道 .. 我们团队中有一些复杂的要求不允许我使用 TFS,经过深思熟虑后,我想出了这个解决方案。
  • 你首先让我感到困惑你说你正在使用 TFS 现在你说你不能使用它.. 听起来如果你正在使用模拟比这可能是一个主要问题.. 如果您在试图弄清楚谁在做什么时遇到问题,您应该能够获得最终用户域名.. 您是否熟悉 var userName = Request.ServerVariables["LOGON_USER"]; 如果不熟悉,您可以使用 var pc = new PrincipalContext(ContextType.Domain); var userFind = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, userName);

标签: c# tfs tfs-sdk


【解决方案1】:

您需要使用“代表他人提出请求”功能。您可以通过以下方式模拟其他用户:

public void Impersonation(Uri serverUri,string userToImpersonate)
{
    // Read out the identity of the user we want to impersonate
    TeamFoundationIdentity identity = ims.ReadIdentity(IdentitySearchFactor.AccountName, 
        userToImpersonate,
        MembershipQuery.None, 
        ReadIdentityOptions.None);

    tfs_impersonated = new TfsTeamProjectCollection(serverUri, identity.Descriptor);

    GetAuthenticatedIdentity(tfs_impersonated);

    // Use this tfs_impersonated object to communicate to TFS as the other users.
}

并确保您运行网站的帐户有权“代表他人提出请求”:

http://www.codeproject.com/Articles/104019/TFS-API-Part-TFS-Impersonation

【讨论】:

  • 我看到了工作项的“Changed By”和“Created By”属性,但没有看到“AutgorisedAs”属性?
  • 我的错...已更新以反映您真正需要做的事情。
猜你喜欢
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2011-01-25
  • 2010-11-25
  • 2019-12-26
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多