给定一个组,我如何检索组的 Microsoft.TeamFoundation.Identity(设置安全权限)

Given a Group, how do I retrieve the Microsoft.TeamFoundation.Identity of the Group (to set Security permissions)

TL;DR:如何获取团队组对象的标识?

据我了解,安全 Access Control Entries use Identities to grant and revoke permissions to users and groups. In order to set a permission for something, I need to know that something's Identity. While browsing my ACEs, I found that Team Groups 被给予 Microsoft.TeamFoundation.Identity 参考,ACE 记录类似于:

{
  "Microsoft.TeamFoundation.Identity;X-X-X-XXXX...": {
    "descriptor": "Microsoft.TeamFoundation.Identity;X-X-X-XXXX...",
    "allow": 0
    "deny": 0
  }
}

可以从 https://{organization}.vssps.visualstudio.com/_apis/Identities 查询这些身份...但我不知道如何给定一个团队组(例如,[MyTeamProject]\Contributors),如何检索该团队组的唯一身份. Team objects 使用 IdentityUrl 属性 可以直接 link 找到我想要的内容,但我没有看到任何适合群组的内容。 Group 对象确实有 descriptor 属性,但这不适用于像 https://{organization}.vssps.visualstudio.com/_apis/Identities?descriptors={descriptor}.

这样的 url

为了检索组的安全身份,我需要进行哪些 API 调用(或调用链)?

Sudo_Brendan,

我现在正在研究这方面的 POC,我认为它可能会对您有所帮助。我正在使用 Microsoft.VisualStudio.Services.WebApi 通过 IdentityHttpClient 执行此操作。

我从这里拉取了 NuGet:https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/15.131.1

ReadIdentitiesAsync 和 ReadIdentityAsync 是我用来获取描述符的方法。这个简单的代码示例允许您将组添加到 Azure DevOps 中的团队。

ReadIdentitiesAsync 的重载允许更高级的搜索和过滤,因此您可以查找单个用户的电子邮件地址。希望这有帮助。

    public async Task AddGroupToTeam(WebApiTeam team, params string[] groups)
    {            
        var client = await GetConnectedClient<IdentityHttpClient>();
        var tasks = new List<Task>();

        foreach (var group in groups)
        {
            var result = await client.ReadIdentitiesAsync(IdentitySearchFilter.DisplayName, group);

            var teamIdentity = await client.ReadIdentityAsync(team.Id);
            var userIdentity = result.First();

            tasks.Add(client.AddMemberToGroupAsync(teamIdentity.Descriptor, userIdentity.Id));
        }

        Task.WaitAll(tasks.ToArray());
    }

ReadIdentitiesAsync 似乎调用这个:

获取:https://spsprodeus23.vssps.visualstudio.com/{organization}/_apis/Identities?searchFilter=DisplayName&filterValue={groupName}&options=None&queryMembership=None

ReadIdentityAsync 似乎调用这个:

获取:https://spsprodeus23.vssps.visualstudio.com/{organization}/_apis/Identities/{id}?queryMembership=None

加入群组

PUT:https://spsprodeus23.vssps.visualstudio.com/{organization}/_apis/identities/{Descriptor}/Members/{id}

不,您不使用 Microsoft.VisualStudio.Services.WebApi。 IdentityHttpClient 仅包含在旧 Client Api.