首先,我必须设置 IsSessionMode = true 来减小 cookie 的大小
我需要平衡 2 个 RP 实例我在 2 台具有 RP 实例的不同计算机上执行了以下步骤:
1) 订阅服务配置创建事件
private void WSFederationAuthenticationModule_ServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
{
X509Certificate2 certificate = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, ConfigHelper.FrontendCertificate);
var sessionTransforms = new List<CookieTransform>(new CookieTransform[]
{
new DeflateCookieTransform(),
new RsaEncryptionCookieTransform(certificate),
new RsaSignatureCookieTransform(certificate)
});
SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
}
2)取消会议以 asp.net 国家服务
问题:
当我尝试登录 STS 时,我收到从 RP 到 STS 的无限重定向
我不明白为什么。令牌存储在会话中(IsSessionMode = true)。会话通过状态服务在 2 个不同的主机之间共享 asp.net。
问题出在哪里?我错过了什么?
我想我不明白一些重要的事情。
我最好的猜测是 WIF 只是无法在 RP 端建立会话,并且用户登陆了一个未经授权的页面(可能是自定义错误页面?),这提示 WIF 重定向回 STS 进行身份验证,现在您正在循环。
您可以尝试一些实验:
-
关闭 IsSessionMode = false,然后查看问题是否仍然存在。如果没有,则您知道 WIF 在创建会话时阻塞,您可以检查以确保您的 RP 成功联系 ASP.NET 状态服务。
-
安装 Fiddler (http://fiddler2.com/fiddler2/),它是调试此类无限重定向的宝贵工具。收集一些痕迹,看看发生了什么。您也可以考虑发布您的 RP web.config。