首页 > 解决方案 > 如何在 Azure Devops 中使用服务帐户模拟用户

问题描述

我创建了一个服务帐户来模拟我组织中的用户,以便更改用户名下的工作项。我已经将该服务帐户添加到“项目收集服务帐户”组中,该组的“代表他人提出请求”设置为“允许”。服务帐户具有 Visual Studio 订阅。

然后,我使用与我们的本地 TFS 配合使用的代码来执行模拟,我收到错误 500,提示“访问被拒绝:X 需要以下权限才能执行此操作:代表其他”</p>

我应该怎么做才能使它起作用?这是我正在使用的代码:

        var credential = new VssAadCredential("X@myoganization", "password");
        var collection = new TfsTeamProjectCollection(new Uri("my_devops_uri"), credential);
        MyTfsConnection.ProjectCollection = collection;

        MyTfsConnection.IdentityService = collection.GetService<IIdentityManagementService>();
        MyTfsConnection.WIStore = collection.GetService<WorkItemStore>();

        var adAccount = "someone@myoganization";
        var identity = MyTfsConnection.IdentityService.ReadIdentity(IdentitySearchFactor.AccountName, adAccount, MembershipQuery.None, ReadIdentityOptions.None);
        using (var impersonatedCollection = new TfsTeamProjectCollection(new Uri("my_devops_uri"), credential, identity.Descriptor))
        {

            var impersonatedWIStore = impersonatedCollection.GetService<WorkItemStore>();
        }

标签: c#tfsazure-devops

解决方案


它无法做到这一点,服务帐户并非旨在将客户端与服务器连接起来,或者签入代码或更改工作项。

服务帐户用于运行与 TFS 相关的各种服务。它应该在机器上具有最低权限。

客户端不应使用服务帐户连接到服务器,他们应该使用自己的帐户,您授予对 TFS 中相关存储库的访问权限。例如,如果您使用服务帐户连接所有客户端,您如何知道谁签入了每个变更集,应该将工作项分配给谁?

您也无法将工作项分配给服务帐户。


推荐阅读