首先,我必须设置 IsSessionMode = true 来减少Cookie的大小
我需要平衡2个RP实例 我在带有RP实例的2台不同机器上执行了以下步骤:
1)订阅 ServiceConfigurationCreated事件
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)。会话由两个不同的主机通过asp.net状态服务共享。
有什么问题?我错过了什么?
我想我不明白重要的事情。
答案 0 :(得分:0)
我最好的猜测是WIF只是无法在RP端建立会话,并且用户登陆未经授权的页面(可能是自定义错误页面?),这会提示WIF重定向回STS进行身份验证,现在你正在循环。
您可以尝试一些实验:
关闭IsSessionMode = false,查看问题是否仍然存在。如果没有,那么您知道WIF会在会话创建时遇到阻塞,您可以检查以确保您的RP成功联系ASP.NET状态服务,例如。
安装Fiddler(http://fiddler2.com/fiddler2/),这是调试此类无限重定向的宝贵工具。收集一些痕迹,看看发生了什么。您也可以考虑发布您的RP web.config。