Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ADFS 2.0单一注销未注销_C#_Claims Based Identity_Adfs2.0 - Fatal编程技术网

C# ADFS 2.0单一注销未注销

C# ADFS 2.0单一注销未注销,c#,claims-based-identity,adfs2.0,C#,Claims Based Identity,Adfs2.0,我正在编写的一个实现ADFS 2.0的web应用程序出现问题。我可以让用户很好地登录,但我确实存在这样的情况:用户需要能够注销应用程序,以便允许其他用户登录 发生的情况是,当用户单击“注销”按钮时,它将通过以下方法运行: public void SignOut() { WSFederationAuthenticationModule.FederatedSignOut(new Uri(Properties.Settings.Default.ADFSIssuer),

我正在编写的一个实现ADFS 2.0的web应用程序出现问题。我可以让用户很好地登录,但我确实存在这样的情况:用户需要能够注销应用程序,以便允许其他用户登录

发生的情况是,当用户单击“注销”按钮时,它将通过以下方法运行:

    public void SignOut()
    {
        WSFederationAuthenticationModule.FederatedSignOut(new Uri(Properties.Settings.Default.ADFSIssuer),
            new Uri(Properties.Settings.Default.ADFSRealm));
    }
我的ADFS发行者就是其中的一部分,我的ADFS领域是我的web应用程序的主url

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

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


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

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

如果是这种情况,那么您就不能真正从已经通过身份验证的ADF注销,它会在应用程序发出下一个请求时愉快地重新颁发令牌。您无法对此执行任何操作,因为身份验证是使用ntlm/kerberos执行的,而这是一个浏览器,它会在您关闭凭据之前保留您的凭据


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

您能检查哪些Cookie在未登录、登录和注销后存在吗。注意cookies的域。我在登录之前清除了缓存。我在登录之前没有cookies,在登录之后,我有一些由ADFS分配给我的cookies,然后是由我的实际web应用程序分配给我的两个cookies。注销后,我仍有两个Cookie由ADFS分配给我:msispSelectionPersistent和msisLopDetectionCookie。您的ADFS配置为什么身份验证模式(窗体或windows)?这可能就是新用户获得以前凭据的原因。RP或STS假定它已通过身份验证,因为它仍然看到这些cookies。@Wiktor:身份验证模式ADFS配置为Windows。将ADFS更改为窗体模式是否会阻止当前Windows用户自动登录?是的。您不能同时拥有这两种功能。所以您可以拥有自动登录或注销功能,但不能同时拥有这两种功能?