有网络配置:
客户端 - 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,一切正常。
有没有人遇到过哪个问题?
答案 0 :(得分:1)
问题是由Reflector发现的,它存在于WIF的CookieHandler中。
只有当请求的路径与CookieHandler(默认情况下是IIS上的应用程序虚拟目录)设置的路径匹配(区分大小写)时,浏览器才会发送cookie。当WIF处理请求时,它会将请求的路径与CokkieHandler的路径进行比较。如果它们不匹配(区分大小写)WIF认为用户只输入了错误的套接字URL但他或她仍然想要访问该应用程序,但是用户的浏览器不会发送会话cookie因为案例不匹配,所以WIF的CookieHandler使重定向到正确的URL,但它不知道真正的端口号,所以它只是添加了请求的端口号来重定向答案。浏览器尝试进行重定向,请求的端口在FW上关闭,我们收到错误。
在.NET FW 4.5中,您可以使用自己的Custom CookieHandler覆盖CookieHandler的默认行为并实现其MatchCookiePath方法(例如,您可以从应用程序配置文件中添加特殊端口号)。
您也可以只使用降低的案例网址和应用程序名称,并在WIF开始处理之前降低每个请求,然后就不会有重定向。