首页 > 解决方案 > 清除缓存的 TFS 客户端凭据

问题描述

请帮助我使用 c# 代码清除 TFS 缓存的凭据。我正在使用 TFS API 访问由位于https://dev.azure.com的 Dev ops TFS 服务器托管的源代码

有时(更改域密码后)访问源代码服务器时会引发 401 错误。请在下面找到用于连接的代码示例:

    var u = "https://dev.azure.com/orgid";

    var vssCred = new VssClientCredentials();
    if (cacheCred)
        vssCred.Storage = new VssClientCredentialStorage(); // tried with storage and without

    Logger.Debug("getting vsts collection for url:{0}", u);
    TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(u, vssCred);
    try
    {
        Logger.Debug("authenticating");

        tpc.Authenticate();
        tpc.GetService<VersionControlServer>();

它使用Microsoft.TeamFoundationServer.ExtendedClient.15.131.1Microsoft.TeamFoundationServer.Client.15.131.1包装。

我尝试使用如下代码清除缓存的凭据:

IEnumerable<string> ClearCachedTokens(VssCredentials cred, Uri address)
{
    if (cred == null) return null;
    var res = new Collection<string>();
    foreach (VssCredentialsType enumValue in Enum.GetValues(typeof(VssCredentialsType)))
        try
        {
            var token = cred.Storage.RetrieveToken(address, enumValue);
            if (token != null)
            {
                var tokenData = string.Join(";", token.Properties.Select(_ => string.Format("{0}={1}", _.Key, _.Value)));
                Logger.Debug("got token {0} {1}", enumValue, tokenData);
                cred.Storage.RemoveToken(address, token);
                res.Add(address.ToString());
            }
        }
        catch (Exception ec)
        {
            Logger.Warn("can't clear token type:{0} error:{1}", enumValue, ec.Message);
        }
    return res;
}

但它不返回任何条目并且错误仍然存​​在。

但是,当我删除%appdata%Local\Microsoft\Team Foundation\7.0\Cache内容并运行tf.exe get命令时,错误消失了。它要求我输入登录名和密码,然后在执行时不再显示 401 错误tpc.Authenticate();

如何使用或API清除Cache文件夹中缓存的凭据?TeamFoundationServer.ClientTeamFoundationServer.ExtendedClient

标签: tfsazure-devops

解决方案


凭证可能已保存在Generic Credentials组的 Credential Manager 存储区 ( Control Panel\All Control Panel Items\Credential Manager) 中。


推荐阅读