哪个范围允许TFS扩展操作ACL?

时间:2017-06-26 18:09:42

标签: tfs azure-devops-extensions

TFS 2015 u2。尝试编写一个TFS扩展,该扩展将使用JavaScript API来操纵发布定义的安全性。与安全相关的API失败,错误401.代码为:

scopes

401未经授权的错误。据我所知,扩展可能使用的REST API列表由清单中的item_name_MyItem1=Nice Title item_desc_MyItem1=A short description 参数驱动。我在那里放置什么才能工作? The scopes list没有列出任何类型。

同时,使用Windows身份验证从常规REST客户端调用相同的端点可以按预期工作。

2 个答案:

答案 0 :(得分:2)

在TFS 2017 u2中,最后有 vso.security_manage

在TFS 2017 u1中,范围vso.base涵盖此API端点,但仅限于GET。 POST,这是更改描述符所必需的,仍然不在范围内。

在TFS 2015 u2中,可能在下面,没有涵盖ACL相关端点的范围。

我发现了一种非常的hackish方式,可以在旧版本的TFS中为OAuth启用这些端点。它仅适用于本地TFS。 OAuth范围与服务端点URL /方法之间的关系存储在全局,公共,可变单一数据结构中,一个用户代码可能只能更改。如果你在CreateDefault内的Microsoft.VisualStudio.Services.DelegatedAuthorization.AuthorizationScopeDefinitions课程中找到方法Microsoft.TeamFoundation.Framework.Server.dll,你可以在你最喜欢的MSIL反汇编程序(ILDASM,ILSpy,Reflector)中看到它。

以下Global.asax可以解决问题。您必须将其复制到C:\Program Files\Microsoft Team Foundation Server 14.0\Application Tier\Web Services(针对TFS 2015)。

<%@ Application Inherits="Microsoft.TeamFoundation.Server.Core.TeamFoundationApplication" %>
<%@ Import namespace="Microsoft.VisualStudio.Services.DelegatedAuthorization" %>
<%@ Import namespace="System.Collections.Generic" %>
<%@ Import namespace="System.Linq" %>
<script runat="server">
void Session_Start(object o, EventArgs a)
{
    AuthorizationScopeDefinition Def = AuthorizationScopeDefinitions.Default.scopes
        .FirstOrDefault(d => d.scope == "vso.identity");
    if(Array.IndexOf(Def.patterns, "/_apis/SecurityNamespaces#GET") < 0)
    {
        List<string> l = Def.patterns.ToList();
        l.Add("/_apis/SecurityNamespaces#GET");
        l.Add("/_apis/AccessControlLists#GET+POST");
        l.Add("/DefaultCollection/_apis/SecurityNamespaces#GET");
        l.Add("/DefaultCollection/_apis/AccessControlLists#GET+POST");
        Def.patterns = l.ToArray();
    }
}
</script>

挂钩Application_Start会更有意义,但代码隐藏DLL已经挂钩了它。 Global.asax中的另一个处理程序不会覆盖。我对vso.identity范围进行了修补,因为我的扩展程序已经声明了这一点,但可以随意使用其他任何一个。

介绍您自己的全新范围​​可能无效。

答案 1 :(得分:0)

不幸的是,没有任何REST API可以更改发布定义或发布环境的权限。

您可以投票使用用户声音。 REST API for release defintion or release enviornment TFS PM将审核您的建议。