0

我正在实现一个简单的负载均衡器——它是一个 http 侦听器,它解析来自浏览器的传入请求并将它们路由到适当的 ASP.NET 应用程序。它侦听某个端口 (8801) 并在路由时保留原始 URI 并仅更改端口号,例如https://machine.domain.com:8801/testsite/Default.aspx可以路由到https://machine .domain.com:8811/testsite/Default.aspx

没有安全路由就可以正常工作。当我尝试将 WIF 联合应用于 ASP.NET 应用程序时,问题就出现了。我使用 ADFS 2.0。这是我尝试过的两种情况:

情景 1

依赖方的 WS-Federation 被动端点设置为 ASP.NET 应用程序 URI

当通过浏览器访问负载均衡器 URI 时,负载均衡器路由到 ASP.NET 应用程序并加载页面,但是,根据被动,来自 STS 的 RequestSecurityTokenResponse 被直接重定向到 ASP.NET 应用程序(而不是负载均衡器)端点设置。所以它可以工作,但由于我希望通过负载均衡器处理与 ASP.NET 应用程序的整个通信,所以这种情况不符合我的要求。

情景 2

依赖方的 WS-Federation 被动端点设置为负载平衡器 URI

当通过浏览器访问负载均衡器 URI 时,负载均衡器路由到 ASP.NET 应用程序,该应用程序返回未经授权的响应,浏览器重定向到 STS,RequestSecurityTokenResponse 被重定向回负载均衡器,但是当进一步路由到 ASP.NET 应用程序时,我得到 401 的响应 - 未经授权:由于凭据无效,访问被拒绝。这是由于我认为 URI 不匹配,因为 saml 令牌是为负载均衡器 URI 颁发的。我尝试了各种受众 uri 和领域的组合,但没有成功。

所以我的问题是是否存在使负载均衡器能够处理所有必要的联合通信的解决方法,因为我的 ASP.NET 应用程序只能从负载均衡器访问。

我希望我足够清楚地解释了我的问题。

非常感谢帮助谢谢

4

2 回答 2

1

Eventually the problem was somewhere else. What my load balancer actually does is to transform an incoming HttpListenerRequest to a new HttpWebRequest, which is then forwarded to the appropriate ASP.NET app. However, I didn't disable the auto redirect on the forwarded request so there were happening redirections from ASP.NET app to ADFS. This code did the magic:

HttpWebRequest.AllowAutoRedirect = false;

于 2012-03-28T11:43:04.320 回答
0

在您的依赖方应用程序 web.config 中,您能否确认您的 federatedAuthentication 部分看起来像这样(下面的领域应该指定您的 NLB 端口):

<federatedAuthentication>
    <wsFederation passiveRedirectEnabled="true" issuer="https://mysts.com/v2/wsfederation" realm="https://machine.domain.com:8801/testsite/Default.aspx" requireHttps="false" />
    <cookieHandler requireSsl="false" />
</federatedAuthentication>

此外,您应该注意的另一个问题是会话 cookie。WIF 默认使用 DPAPI 对其进行加密,因此您必须改用 RsaEncryptionCookieTransform。在 Azure 中使用 WIF 时也存在同样的问题。这是一篇演示如何完成此操作的文章:

http://msdn.microsoft.com/en-us/library/windowsazure/hh289318.aspx

于 2012-03-22T22:06:37.627 回答