这更多是出于好奇,因为我找不到任何关于这一现象的答案或文档,但下面是一个场景:
有两个服务/应用程序,它们都托管在IIS 7上。服务1从外部源(浏览器、摆弄器等)接收HTTPS请求。为了验证它需要调用服务2的请求,服务1通过HTTP对服务2进行了自己的、新的、单独的调用。这个调用在请求对象中添加了一个授权头。当服务2接收到这个调用时,身份验证头就被删除了,就好像被删除了一样。因此,身份验证失败,这将返回服务1,然后服务1拒绝外部调用。
有谁能解释一下为什么这个标头和我在测试中看到的其他一些头没有通过HTTP调用来完成呢?这是IIS或ASP.NET的行为还是什么?如果对服务2的调用是HTTPS,那么报头将使其通过良好。我正在生成这样的请求:
string uriendpoint = "http://service.test.com/testService.svc/authtest";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriendpoint);
request.Credentials = CredentialCache.DefaultCredentials;
var authField = MD5Hash("test:test!!2013");
request.Headers.Add(HttpRequestHeader.Authorization, authField.ToString());
request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
发布于 2013-06-24 16:43:05
我的一位同事发现这种行为的根本原因是IIS的"URL重写“模块。我们已经设置了将http请求永久重定向到https的设置,而这个重定向就是头文件被删除的地方。IIS这样做有点奇怪,但我想我会尝试其他方法来解决这个问题。
发布于 2013-06-21 23:59:11
“服务2”很可能有类似于“如果传入请求是HTTP忽略授权头”的代码。这是非常合理的行为,因为HTTP流量可以很容易地被嗅探和重放-所以诚实的服务器阻止调用者可能不安全的行为。
https://stackoverflow.com/questions/17245900
复制相似问题