我正在组合一个在 IIS 7 网站实例中运行的 WCF REST 服务,并且我正在使用HMAC身份验证方案,该方案将令牌和 HMAC 插入到身份验证标头中。典型请求的示例标头列表可能如下所示:
GET http://api.mydomain.com/Contacts HTTP/1.1
Authorization: 774F035C-FRTB-4207-DDDD-31BF1534AD96:9h0Whke9Bgi3XSHPo/YSXw==
Content-Type: application/xml; charset=utf-8
Host: api.mydomain.com
Connection: Keep-Alive
我使用路由而不是 .svc 文件设置了服务,所以我的 Global.asax 看起来像这样:
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("Users", new WebServiceHostFactory(), typeof(UsersService)));
RouteTable.Routes.Add(new ServiceRoute("Widgets", new WebServiceHostFactory(), typeof(WidgetsService)));
}
问题是,当使用这样的路由声明服务时,如果 IIS 收到对没有尾部斜杠WebGet
的uri的调用,它会执行 307 重定向到带有尾部斜杠的 uri。您会认为这很有帮助,但问题是重定向转储了 Authorization 标头。
我的服务课程都是犹太洁食,在其他各个方面都做得很好。有没有办法让我能够在重定向的情况下维护该 Authorization 标头?我怀疑解决方案将是一个 IIS 配置问题,尽管我想我可以放置各种路由黑客来获取 uri 的无斜线版本。
更新:
我发现这篇文章验证了这种行为,但并没有真正给出任何修复。