C# ADFS 2.0单一注销未注销
我正在编写的一个实现ADFS 2.0的web应用程序出现问题。我可以让用户很好地登录,但我确实存在这样的情况:用户需要能够注销应用程序,以便允许其他用户登录 发生的情况是,当用户单击“注销”按钮时,它将通过以下方法运行: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),
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用户自动登录?是的。您不能同时拥有这两种功能。所以您可以拥有自动登录或注销功能,但不能同时拥有这两种功能?