我对SAML 2.0单次注销有问题。
我有一个SAML 2.0环境,其中有一个IdP(身份提供者)和一个充当SP(服务提供者)的web应用程序。
作为用户,我在用户代理(浏览器)中启动Web应用程序会话。用户使用IdP进行身份验证。
在不同的浏览器(在同一客户端机器上运行)中,我在同一Web应用程序中作为同一用户启动另一个会话,即在SAML方面的同一SP中。
现在,我有两个独立的web应用程序会话,在其中对同一个用户进行身份验证。
然后,当我在其中一个浏览器中执行由IdP发起的一次注销时,IdP只发出一个注销请求,终止在该浏览器中运行的会话。IdP发出的注销请求元素等于IdP在使用该浏览器(用户代理)发送给SP的断言的Authn语句的属性SessionIndex中发送的元素。
难道IdP实际上不需要为所有打开的会话发送注销请求以实现真正的“单次注销”吗?
简而言之:SAML规范允许单次注销(SLO)按照您想要的方式行事,但典型的实现并没有那么复杂。
根据SAML配置文件规范第4.4节(单注销配置文件):
一旦委托人对身份提供者进行了身份验证,身份验证实体就可以与委托人建立会话(通常通过cookie、URL重写或其他特定于实现的方式)。身份提供者随后可以基于此身份验证事件向服务提供者或其他依赖方发出断言;依赖方可以使用此断言与委托人建立自己的会话。在这种情况下,身份提供者可以充当会话权威,依赖方可以充当会话参与者。
如果SLO序列是由一个会话参与者发起的,那么整个讨论将是没有意义的。该规范要求会话参与者通过身份提供者最初发送给会话参与者的唯一ID(也称为会话索引)来识别正在终止的“共享”会话。根据规范的要求,此ID在SP会话#1和SP会话#2中不同。
...但是,当SLO序列由IdP启动时,您的场景是可能的。第4.4.4.1节讨论了关于发布和处理<代码>
如果请求者是会话参与者,则必须至少包括一个<代码>
翻译:如果你能告诉IdP发布一个<代码>
实际上,上述条件的结合是一个非常高的要求。开箱即用,大多数IDP不会发出<代码>
我成功地将OneLogin java saml库用于saml SSO。但Active Directory联合身份验证服务(ADFS)的SLO(单次注销)存在问题。ADFS拒绝库创建的LogoutRequest,而SimpleSAMLphp IdP接受它。我在LogoutRequest创建时传递从ADFS接收的nameId和sessionIndex。 以下是生成的请求和收到的响应: 授权请求: 答复
在Okta开发者帐户中,我启用了SAML单注销,并获得了身份提供者单注销URL。我使用从单点登录过程中获得的SAML响应中获得的NameID和SessionIndex创建了以下注销请求。 注销请求: 我收到以下注销响应,状态代码为RequestDenied 为什么可能是获得RequestDenied状态的原因?在Okta中启用单次注销时,我是否错过了注销请求或配置错误? 提前感谢。
我一直在POCing IDP发起的SAML,我不能上班的最后一部分是全局注销。当用户从 IdP 转到 SP(一切正常)然后选择全局注销时,正在生成 LogoutRequest 并且正在重定向浏览器,但标头中的 sesisonid 不是 IdPsession 标识符 - 我该如何使 IdP 会话无效?
我有一个关于SAML 2.0和SLO的问题<在SLO过程中,作为Idp,我们启动注销并向SP发送注销请求,SP则返回注销响应。我们在IDP端部分注销,用户在IDP端注销,但是如果我返回SP站点,我仍然登录<这是IdP侧还是SP侧的问题?我的意思是SP应该终止会话并向IDP发送注销响应,还是IDP的任务是终止双方的会话? 谢啦
我已经构建了两个keycloak客户机(spring-client和一个tomcat-client,使用keycloak、OIDC、spring boot adapter和OIDC、tomcat adapter),它们都在同一领域工作。我和这些客户有两个问题。 当我要登录到这些客户端时,我需要分别为每个客户端提供用户名和密码,即使我使用的是相同的浏览器(多个选项卡)和相同的用户名。 当我需要注销时
我使用Keyclok(KC)作为OIDC的身份代理。 1) 浏览客户端应用程序并按登录按钮 2) 后台登录按钮将调用KC认证endpoint,该endpoint将显示IDP登录页面 3) User1为登录页面添加书签并输入凭据并开始使用客户端网站 4)用户1在未退出时关闭浏览器 5)用户2立即出现并点击显示IDP登录页面的书签页面 6)用户2输入凭据,并得到以下错误: [错误信息][1] [1]: