【问题标题】:Windows Identity Foundation and Port ForwardingWindows Identity Foundation 和端口转发
【发布时间】:2013-02-27 12:34:23
【问题描述】:

有网络配置:

客户端 - 固件 - 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.aspx,一切正常,用户被重定向到 IP。但是如果用户试图获取http://MyWevSite/myapp/index.aspx(小写的应用程序名称),IIS 会返回客户端重定向到http://MyWebSite:8080/MyApp/Index.aspx。因为在 FW 上关闭了端口 8080,所以用户会收到错误消息。 如果我从我的应用程序中删除 WIF,一切都会再次正常运行。

有没有人遇到过这样的问题?

【问题讨论】:

    标签: wif


    【解决方案1】:

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

    仅当请求的路径与 CookieHandler 设置的路径匹配(区分大小写)时,浏览器才会发送 cookie(默认情况下,应用程序在 IIS 上的虚拟目录)。当 WIF 处理请求时,它会将请求的路径与 CokkieHandler 的路径进行比较。如果它们不匹配(区分大小写),WIF 认为用户只是输入了错误的大小写 URL,但他或她仍想访问应用程序,但用户的浏览器不会发送会话 cookie,因为大小写不匹配,所以 WIF 的 CookieHandler重定向到正确的 URL,但它对真实端口号一无所知,所以它只是添加了请求的端口号来重定向答案。浏览器尝试重定向,请求的端口在 FW 上被关闭,我们得到一个错误。

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

    您也可以只使用小写的 url 和应用程序名称,并在 WIF 开始处理它之前使每个请求降低,这样就不会有重定向。

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 2012-02-20
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2011-08-10
      • 2011-06-22
      相关资源
      最近更新 更多