0

出于技术原因,我们在我们的应用程序中实现了两个不同的 STS 网站。这些 STS 颁发基于不同证书的令牌。

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

两个应用程序都使用 Claim Type Name 来设置登录时的用户名,然后这会出现在依赖方应用程序 UI 中。

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

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

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

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

如果有人能就如何使 STS 发行的代币完全相互独立提供一些建议,我将不胜感激。

非常感谢,约翰

4

2 回答 2

0

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

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

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

于 2013-04-11T14:32:03.183 回答
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>
于 2013-04-11T14:56:24.133 回答