2013-02-10 81 views
1

有净cofiguration:Windows标识基础和端口转发

客户端 - FW - IIS

IIS正在监听8080端口,对IIS Web应用程序,例如MyApp的。 FW实现简单的端口转发(将端口80替换为端口8080)。 假定以下情况:

客户端询问http://MyWebSite/MyApp/Index.aspx,FW改变非标准端口80到8080和请求是 http://MyWebSite:8080/MyApp/Index.aspx。 IIS返回到客户端请求的页面Index.aspx 一个重要的事情:如果用户在浏览器中键入http://MyWebSite/myapp/index.aspx IIS返回http://MyWebSite/MyApp/Index.aspx(因此它根据真实应用程序名称更改url地址)。 一切正常。

但是,如果我插入标准管道WIF,则会出现问题。例如,我希望MyApp只接受已通过身份验证的用户。我想将用户重定向到一些身份提供者。 如果用户试图获取页面http://MyWebSite/MyApp/Index.a spx,一切正常,用户被重定向到IP。但是,如果用户试图获取http://MyWevSite/myapp/index.aspx(应用名称为小写),则IIS返回客户端重定向至http://MyWebSite:8080/MyApp/Index.aspx。由于端口8080在FW上关闭,因此用户出现错误。 如果我从我的应用程序中删除WIF,再次正常工作。

有没有人遇到过这个问题?

回答

1

问题是由Reflector发现的,它在WIF的CookieHandler中。

浏览器仅在请求的路径匹配(区分大小写)路径由CookieHandler(默认为应用程序在IIS上的虚拟目录)设置时发送cookie。当WIF处理请求时,它将请求的路径与CokkieHandler的路径进行比较。如果它们不匹配(区分大小写)WIF认为用户只是输入了错误的封装网址,但他或她仍想访问该应用程序,但用户的浏览器不会发送会话Cookie,因为这些案例不匹配,所以WIF的CookieHandler使重定向到正确的URL,但它不知道任何关于真正的端口号,所以它只是添加了请求的端口号来重定向答案。浏览器尝试重定向,请求的端口在FW上关闭,出现错误。

在.NET FW 4.5中,您可以使用自己的Custom CookieHandler并实现其MatchCookiePath方法(例如,可以从应用程序配置文件添加特殊端口号)来覆盖CookieHandler的默认行为。

您也可以只使用降低的案例URL和应用程序名称,并在WIF开始处理它之前降低每个请求,然后就不会有重定向。