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

Azure devops 给定一个组,如何检索该组的Microsoft.TeamFoundation.Identity(设置安全权限),azure-devops,azure-devops-rest-api,Azure Devops,Azure Devops Rest Api,TL;DR:如何获取团队对象的标识 据我所知,安全性使用身份向用户和组授予和撤销权限。为了设置某事物的权限,我需要知道该事物的标识。在浏览我的ACE时,我发现它们被授予了Microsoft.TeamFoundation.Identity引用,ACE记录类似于: { "Microsoft.TeamFoundation.Identity;X-X-X-XXXX...": { "descriptor": "Microsoft.TeamFoundation.Identity;X-X-X-XXX

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

据我所知,安全性使用身份向用户和组授予和撤销权限。为了设置某事物的权限,我需要知道该事物的标识。在浏览我的ACE时,我发现它们被授予了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/_-api/identifications查询这些标识。。。但我不知道,对于一个团队组(例如,
[MyTeamProject]\\Contributors
),如何检索该团队组的唯一标识。使用
IdentityUrl
属性可以直接链接到我想要的内容,但我看不到任何可以很好地映射组的内容。组对象确实具有
描述符
属性,但这不适用于像
https://{organization}.vssps.visualstudio.com/_-api/identifications?描述符={descriptor}
这样的URL

我需要进行什么API调用(或调用链)才能检索组的安全标识?

Sudo\u Brendan

我现在正在做一个POC,我想它可能会对你有所帮助。我正在使用Microsoft.VisualStudio.Services.WebApi对IdentityHttpClient执行此操作

我从这里取走了裸体:

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

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

    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());
    }
public async Task AddGroupToTeam(WebApiTeam团队,参数字符串[]组)
{            
var client=等待GetConnectedClient();
var tasks=新列表();
foreach(组中的var组)
{
var result=await client.ReadIdentitiesAsync(IdentitySearchFilter.DisplayName,组);
var teamIdentity=wait client.readidentitysync(team.Id);
var userIdentity=result.First();
添加(client.AddMemberToGroupAsync(teamIdentity.Descriptor,userIdentity.Id));
}
Task.WaitAll(tasks.ToArray());
}
ReadIdentitesAsync似乎将此调用:

获取:{organization}/_API/Identity?searchFilter=DisplayName&filterValue={groupName}&options=None&queryMembership=None

ReadIdentityAsync似乎将其称为:

获取:{organization}/_-api/identies/{id}?queryMembership=None

添加到组


PUT:{organization}/_API/identies/{Descriptor}/Members/{id}

不,您不使用Microsoft.VisualStudio.Services.WebApi。
IdentityHttpClient仅包含在旧客户端Api中。

太棒了,谢谢!你让我走上了正确的道路,但我不得不做一些调整。。。我用来查找组标识的最后一个URL(给定组的显示名,使用
https://vssps.dev.azure.com/{organization}/_-api/graph/groups
)是
https://{organization}.vssps.visualstudio.com/_-api/identifications?searchFactor=DisplayName&factorValue={url-encoded-groupDisplayName}&options=None&queryMembership=None
(注意查询中的“过滤器”->“因子”)