c# - 如何在 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>();
}
解决方案
它无法做到这一点,服务帐户并非旨在将客户端与服务器连接起来,或者签入代码或更改工作项。
服务帐户用于运行与 TFS 相关的各种服务。它应该在机器上具有最低权限。
客户端不应使用服务帐户连接到服务器,他们应该使用自己的帐户,您授予对 TFS 中相关存储库的访问权限。例如,如果您使用服务帐户连接所有客户端,您如何知道谁签入了每个变更集,应该将工作项分配给谁?
您也无法将工作项分配给服务帐户。
推荐阅读
- javascript - 切换后引导汉堡不显示列表元素
- reactjs - 没有从 React Native 获取 WebView 内的数据
- c# - 如何在 twilio 通话期间收集用户输入
- javascript - jQuery AJAX 上传到带有返回值的 ASMX WebMethod
- javascript - jQuery ImageViewer 以奇怪的缩放启动
- python - PyArray_SimpleNewFromData 问题 - 位置未知?
- openstack - Cloudify - Openstack-Plugin - 如何授予对指定到 KeyPair Cloudify 构建块中的路径的写入/读取密钥的权限
- android - Android:onAnimationStart 和 onAnimationEnd 为自定义 LinearLayout 执行了两次
- php - 没有PHP错误,codeigniter仍然显示空白页面
- amazon-dynamodb - 使用 VTL 在 AppSync 中添加或更新修改日期属性