团队服务程序化访问适用于没有凭据的一些用户 - 为什么?

时间:2018-01-04 15:41:30

标签: azure-devops

我们最近升级到VS 2017和Visual Studio Team Services。

我们有一套自动化工具,可以代表开发人员执行各种与源代码管理相关的任务。

某些用户和一个服务帐户似乎在某处缓存了凭据,并且在运行工具时不会提示您输入凭据。

但是,会提示其他用户提供凭据。

我创建了一个迷你测试应用来说明问题。注意:VSTS dll是VS2017 Team Explorer安装文件夹中的15.x版文件。如果您不介意膨胀,它们也可作为Microsoft.TeamFoundationServer.ExtendedClient NuGet包的一部分提供。

using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace VSTSTest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {

                if (args.Length > 0)
                {
                    var projectCollectionUrl = args[0];

                    var projectCollection = new TfsTeamProjectCollection(new Uri(projectCollectionUrl));
                    var versionControlServer = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));

                    Console.WriteLine("AuthorizedUser: {0}", versionControlServer.AuthorizedUser);
                }

                Console.WriteLine("Usage is {projectCollectionUrl}");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.ReadLine();
        }
    }
}

这适用于某些用户,但不适用于其他用户,我试图找出原因。

1 个答案:

答案 0 :(得分:1)

检查此注册表路径:HKEY_CURRENT_USER\Software\Microsoft\VSCommon\14.0\ClientServices\TokenStorage\VisualStudio\VssApp(在VS2017中测试,它也存储在14.0中)

您也可以查看凭据管理器。

另一方面,您可以更改存储密钥:

var c = new VssClientCredentials();
c.Storage = new VssClientCredentialStorage(storageKind: "VssApp2", storageNamespace: "VisualStudio");
TfsTeamProjectCollection _tfs = new TfsTeamProjectCollection(u, c);