使用非个性化身份验证(Team Foundation Server)

时间:2016-05-17 14:50:19

标签: rest authentication tfs azure-devops tfs2015

我已经找到了如何使用给定的用户名/密码从我的应用程序向TFS进行身份验证。 我想使用REST服务。

    public static void BasicAuthRestSample()
    {
        // Create instance of VssConnection using basic auth credentials. 
        // For security, ensure you are connecting to an https server, since credentials get sent in plain text.
        VssConnection connection = new VssConnection(new Uri(collectionUri), new VssCredentials(new WindowsCredential(new NetworkCredential(username, password))));

        WorkItemTrackingHttpClient witClient = connection.GetClient<WorkItemTrackingHttpClient>();
        List<QueryHierarchyItem> items = witClient.GetQueriesAsync(teamProjectName).Result;
    }

此解决方案工作正常,但如果我创建一个新的工作项,则由&#34; username&#34;创建。 但我想通过非个性化用户创建工作项,所以我想看看&#34; seconduser&#34;作为创作者,如果我看一下TFS中的工作项目。

我在谷歌上搜索了很多但却找不到一个例子......

VSTS更新:

尝试实施后我发现了这个:

&#34;出于安全原因(以及合规性和许多其他原因),Visual Studio Online&#34;不支持模拟标头。

奇怪的是,该错误消息目前具有误导性,它告诉我在VSTS中实际禁用整个模拟功能时需要特殊权限。

2 个答案:

答案 0 :(得分:0)

您应该使用TfsTeamProjectCollection constructor accepting an IdentityDescriptor。 您可以在Introducing TFS Impersonation中找到完整的说明。

帖子中的片段 // Get the TFS Identity Management Service IIdentityManagementService identityManagementService = currentUserCollection.GetService<IIdentityManagementService>(); // Look up the user that we want to impersonate TeamFoundationIdentity identity = identityManagementService.ReadIdentity( IdentitySearchFactor.AccountName, username, MembershipQuery.None, ReadIdentityOptions.None); TfsTeamProjectCollection impersonatedCollection = new TfsTeamProjectCollection(currentUserCollection.Uri, identity.Descriptor);

答案 1 :(得分:0)

根据REST API Reference for VS Team Services and TFS,目前没有类似于TFS模拟的REST API。由于.net api仍然可以与VSTS一起使用大多数功能(不支持vNext构建等),您可以将.net api作为替代方案。