【发布时间】:2019-12-10 16:30:22
【问题描述】:
编写 dotnet 核心应用程序。我需要使用网络凭据登录,因为服务(恰好是 TFS 本地服务器)使用这些凭据进行身份验证。在我(和另一个团队成员)的 Windows 机器上,以下代码有效:
Console.WriteLine("Type in your DOMAIN password:");
var pass = GetPassword(); //command line secure string magic from SO
var networkCredential = new NetworkCredential("USERNAME", pass, "DOMAINNAME");
string tfsDefaultCollection = "https://TFSURL/DefaultCollection";
string testUrl = $"{tfsDefaultCollection}/_apis/tfvc/changesets/1234/changes?api-version=2.2";
var httpClientHandler = new HttpClientHandler
{
Credentials = networkCredential
};
var client = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(testUrl)
};
httpClientHandler.PreAuthenticate = true;
var test = client.GetAsync(testUrl).Result;
Console.WriteLine(test);
但它在我的 mac 上不起作用。我收到未经授权的 401。两者都使用相同的硬接线连接。这适用于我的 Mac:
curl --ntlm --user "DOMAINNAME\USERNAME" "https://TFSURL/DefaultCollection/_apis/tfvc/changesets/1234/changes?api-version=2.2"
我认为这样就排除了连接性问题。我错过了我需要在我的 Mac 上做的事情吗?谁能指出一些文档或方法来解决这两个请求在最低级别所做的事情,看看是否有区别?
【问题讨论】:
-
你检查过这个问题吗?它没有公认的答案,但看起来与您的问题很接近:stackoverflow.com/questions/47902642/net-core-and-ntlm-on-osx 我认为关键区别与 CredentialCache - docs.microsoft.com/en-us/dotnet/api/…
-
谢谢,我刚试过,不行。尽管我认为这也是我之前的许多迭代之一。在我的 Windows 机器上工作...
-
您是否尝试过使用客户端访问TFS? domstamand.com/accessing-tfs-2017-programmatically
标签: macos .net-core httpclient ntlm httpclienthandler