【问题标题】:401 Unauthorized when connecting to API through Azure Traffic Manager in C#通过 C# 中的 Azure 流量管理器连接到 API 时出现 401 未授权
【发布时间】:2017-06-08 06:24:12
【问题描述】:

我有以下代码成功连接到 C# 中的第三方 API:

using (var client = new WebClient())
{
    client.Credentials = new NetworkCredential(login.Username, login.Password);

    var xml = client.DownloadString(url);
    Debug.Write(xml);
}

这在直接连接到 API 时可以正常工作。但是,我正在尝试利用 Azure 流量管理器将负载分散到多个端点,并且在执行此操作时出现 401 Unauthorized 异常。使用 Postman 等工具并在请求中配置基本身份验证似乎可以正常工作。

我尝试将代码转换为 RestSharp,但它似乎有相同的症状。

以下是 Fiddler 使用几种不同技术提出的请求:

C#/WebClient 直接到 API 端点(成功)

GET <ApiUrl> HTTP/1.1
Host: <ApiHost>
Connection: Keep-Alive

401 Unauthorized

GET <ApiUrl> HTTP/1.1
Authorization: Basic <AuthToken>
Host: <ApiHost>

C#/WebClient 到 Azure 流量管理器(401 未经授权)

GET <TrafficManagerApiUrl> HTTP/1.1
Host: <TrafficManagerApiHost>

401 Unauthorized

GET <ApiUrl> HTTP/1.1
Host: <ApiHost>

邮递员到 Azure 流量管理器(成功)

GET <TrafficManagerApiUrl> HTTP/1.1
Host: <TrafficManagerApiHost>
Connection: keep-alive
Authorization: Basic <AuthToken>
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8


302 Redirect

GET <ApiUrl> HTTP/1.1
Host: <ApiHost>
Connection: keep-alive
Authorization: Basic <AuthToken>
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=<jsessionid>

【问题讨论】:

  • 您能否使用例如 Fiddler 捕获传出请求并将它们与成功的 Postman 请求进行比较?
  • @NWard 添加。如果我不得不冒险猜测,当通过流量管理器使用 C#/WebClient 时,它会尝试向与原始主机不同的主机进行身份验证。 Postman 似乎急切地在初始请求中发送了 Authorization 标头。

标签: c# webclient azure-traffic-manager


【解决方案1】:

我没有正确处理 Azure 流量管理器的重定向。

答案在此详述:

https://stackoverflow.com/a/28671822/86191

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2014-01-02
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多