Windows Identify Foundation:基于R.P识别的不同证书的2个令牌

时间:2013-04-11 11:43:45

标签: .net wif asp.net-4.5

由于技术原因,我们在申请中实施了两个不同的STS网站。这些STS发布基于不同证书的令牌。

我们有一个主应用程序和一个子集应用程序,每个都配置为使用和信任这些STS网站之一。

两个应用程序都使用声明类型名称在登录时设置用户名,然后在依赖方应用程序UI中显示。

我的问题是,如果我登录一个STS,一切都很好。当我登录到其他应用程序/ STS时,首次登录时在UI中显示的名称将替换为第二次登录时的名称。

我只能假设由于STS使用完全不同的证书来签署令牌,除非配置为在web.config中信任,否则它们将被依赖方忽略。这就是我设置它的方式。

从调试开始,一切似乎都运行良好。创建令牌时使用正确的STS和正确的证书。

我可以看到,当我登录第二个应用程序时,现有的FedAuth cookie会增长,因此两个会话的声明都被添加到同一个cookie中。

如果有人可以提供一些关于如何使STS发出的令牌完全相互独立的建议,我将不胜感激。

非常感谢, 约翰

2 个答案:

答案 0 :(得分:0)

您所看到的是正确的行为,并且两个令牌实际上都是不同的。如果你没有在配置中添加第二个STS,那么针对该STS的认证可能会成功,但它们将被WIF拒绝,因为它们将来自“不可信”的源(未声明的STS)。

如果您将第二个STS添加为“受信任的发行者”,WIF(在您的应用中)将乐意接受其令牌。声明类型“名称”只是映射到User.Name属性的内容。

如果你更多地解释一下你想做什么,这可能会有所帮助。当有人使用第二个STS登录时,你的应用程序会发生什么声音?

答案 1 :(得分:0)

这种行为的原因是,依赖方都没有为身份验证cookie设置名称,所以他们都使用了“FedAuth”。通过明确地为它们提供不同的名称以用于cookieHandler中的cookie,问题得到了解决。

<microsoft.identityModel>
<service>
  <federatedAuthentication>
    <wsFederation passiveRedirectEnabled="false" issuer="http://localhost:9006/App.AD_STS/" realm="http://localhost:6542/" requireHttps="false" />
    <cookieHandler requireSsl="false" path="/" name="AD_STS" />
  </federatedAuthentication>