tfs - 清除缓存的 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.1
和Microsoft.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.Client
TeamFoundationServer.ExtendedClient
解决方案
凭证可能已保存在Generic Credentials组的 Credential Manager 存储区 ( Control Panel\All Control Panel Items\Credential Manager
) 中。
推荐阅读
- c# - 数组创建必须具有数组大小或 C# 中的数组初始化器
- python - 使用 scikit learn 进行分类
- angular - Angular 框架安全问题
- linux - 在 Windows 7 上使用 Qt Creater 时可在 Linux 上执行
- python - ImportError: No module named psycopg2.extensions 在 Cloud DataFlow 上运行我的代码时
- python - Weasy Print 的 Unicode 解码
- httprequest - 检查服务中的 HTTP 状态 - Angular6
- r - 如何在 ggplot 中绘制由数据框的变量之一分面的面板时间序列
- c# - 是什么让新项目的 ids 自动增加(asp.net core 的 DbContext + InMemoryDatabase)?
- c# - Net Core 解决“不包含内容错误的定义”并在 API 中读取为字符串