2016-01-25 14 views
0

我有一个STS登录人,产生一堆索赔,加载到身份,因此委托人,并将控制权转移到我的门户应用程序。门户网站可以通过Thread.CurrentPrinciple.Identities查看所有索赔。在一种情况下,门户会改变其中的两项索赔。完成此操作后,门户网站中的其他方法可以通过上述相同的机制查看更新后的声明。但是,如果我将控制权转交给STS,它将再次通过Thread.CurrentPrinciple.Identities查看原始索赔,而不是已更改的索赔。任何人都可以看到我做错了什么?我不明白为什么会有区别......我认为校长与会议挂钩,并且STS和依赖方也看到了相同的情况。谢谢 -WIF:更新的声明不被其他进程看到

回答

0

STS和门户(aka依赖方)都有单独的cookie和单独的权利要求集。当您从Portal/rp回浏览STS并查看其身份时,您会看到添加到其本地cookie(在您首次登录STS时生成)的STS声明。当您浏览门户网站时,您会看到该网站Cookie中的声明(当STS首次发布WIF令牌并且门户网站的模块截获该声明时生成)。因此,如果您修改门户中的声明,则它们不会影响STS cookie中的声明。

+0

啊所以。感谢那!你知道是否有保存会议范围信息的公约吗?我认为饼干是普遍的,可以这么说。如果不是,我需要一些东西,它需要安全。 – rdgWarren

+0

如果你有一个通用的cookie,它会很快变得无法扩展,因为在你的系统中添加新的站点到你的单点登录时,它内部的索赔数量会增长和增长。更好的模式是STS在首次将WIF令牌发布到RP时向每个RP发布少量通用声明。然后,您的每个RP都应该使用他们自己的域特定声明来丰富此令牌。他们可以通过ClaimsAuthenticationManager ... – jonho

+0

..如果你想让一个RP内部的状态变化可以在STS内部访问,我可能会将状态保存到RP的数据库并在其周围实现一个Web服务。 然后当您浏览回STS调用Web服务。您可以拥有一个中央状态数据库,但它会泄露您的联合网站中不太好的域知识。 – jonho