5

我正在编写实现 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 领域是我的 Web 应用程序的主 URL。

该应用程序似乎已注销。当另一个用户单击登录按钮时,它会自动将他们作为前一个用户登录,而不提示输入凭据。

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

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 应用程序吗?

4

1 回答 1

6

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

如果是这种情况,那么您就不能真正从已经过身份验证的 adfs 中注销,并且它会在应用程序的下一次请求时愉快地重新发出令牌。您无法对此做任何事情,因为身份验证是使用 ntlm/kerberos 执行的,并且该浏览器会保留您的凭据,直到您关闭它。

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

于 2013-09-06T19:22:46.713 回答