最后,在 TFS 2017 u2 中,有vso.security_manage。
在 TFS 2017 u1 中,有一个vso.base
涵盖此 API 端点的范围,但仅限于 GET。更改描述符所需的 POST 仍然不在范围内。
在 TFS 2015 u2 中,大概在下面,没有涵盖 ACL 相关端点的范围。
我发现了一种在旧版本的 TFS 中启用 OAuth 端点的非常骇人听闻的方法。它仅适用于本地 TFS。OAuth 范围和服务端点 URL/方法之间的关系存储在一个全局的、公共的、可变的单例数据结构中,一段用户代码可能只是能够改变。如果您CreateDefault
在Microsoft.VisualStudio.Services.DelegatedAuthorization.AuthorizationScopeDefinitions
.Microsoft.TeamFoundation.Framework.Server.dll
以下 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
,因为我的扩展已经声明了这一点,但可以随意使用任何其他的。
介绍您自己的全新范围可能行不通。