【发布时间】:2011-08-08 18:03:19
【问题描述】:
我正在组合一个在 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 标头。
我的服务课程都是犹太洁食,在其他各个方面都表现出色。 有没有办法让我能够在发生重定向时维护授权标头?我怀疑解决方案将是一个 IIS 配置问题,但我想我可以把所有各种路由黑客来获取 uri 的无斜线版本。
更新:
我发现 this article 验证了这种行为,但并没有真正给出任何修复。
【问题讨论】: