ADFS 2.0单点注销无法注销

时间:2013-09-06 19:00:40

标签: c# claims-based-identity adfs2.0

我遇到的问题是我正在编写实现ADFS 2.0的Web应用程序。我能够让用户登录很好,但我确实有用户需要能够退出应用程序以允许其他用户登录的情况。

当用户点击它通过以下方法运行的注销按钮时会发生什么:

    public void SignOut()
    {
        WSFederationAuthenticationModule.FederatedSignOut(new Uri(Properties.Settings.Default.ADFSIssuer),
            new Uri(Properties.Settings.Default.ADFSRealm));
    }

我的ADFS发卡行是https://adfs.domain.com/adfs/ls/部分,而我的ADFS Realm是我的网络应用程序的主要网址。

该应用程序似乎已经退出。当其他用户单击“登录”按钮时,它会自动将其作为上一个用户登录,而不会提示输入凭据。

我查看了以下资源以寻求帮助,但没有任何效果:

https://github.com/thinktecture/Thinktecture.IdentityServer.v2/issues/195 http://social.technet.microsoft.com/wiki/contents/articles/1439.ad-fs-how-to-invoke-a-ws-federation-sign-out.aspx

我不应该在不关闭浏览器的情况下注销ADFS应用程序吗?

1 个答案:

答案 0 :(得分:6)

我只是猜测,但我怀疑你的adfs配置为windows身份验证,而你的应用程序有Login按钮(从你的描述中不清楚)。

如果是这种情况,那么您无法真正从已经过身份验证的adfs注销,并且很高兴在应用程序的下一个请求时重新发出令牌。您无法对此进行任何操作,因为使用ntlm / kerberos执行身份验证,这是在您关闭凭据之前保留凭据的浏览器。

解决方案是将adfs更改为Forms模式(在adfs web.config中切换提供程序的顺序),这样不仅adfs有自己的cookie,而且当您发出注销消息时,这些cookie也会被真正删除。