我正在使用PingFederate与OpenID连接。当我从赠款管理页面注销时,我遇到了一个问题。
我将我的IdP适配器会话状态设置配置为全局设置。因此,如果我使用其中一个注销端点,我将成功地从所有其他RPs中注销。
注销后,如果我试图通过这个端点获取授权管理页面,就会提示~/as/grants.oauth2,登录页面,这样SLO就可以正常工作。但是,当我进入另一个端点,即~/as/oauth_access_grants.ping时,我可以在不登录的情况下获得页面。那么,您是否知道,为什么全局适配器注销端点不将我从该端点注销,而不将我从其他端点注销?
我正在使用在适配器上定义的端点。
我有层次化适配器。父适配器保存全局设置,并设置为默认设置。子程序也接受会话设置中的全局设置。
因此,当我调用这些适配器的端点之一(共享全局设置)时,我所有具有全局设置的会话都将从会话映射中删除。所以一种选择性的SLO正在发生。
我检查了服务器日志,每个全局集适配器都以HtmlFormIdpAuthnAdapter:SESSION的形式将它们的会话添加到状态映射中。
org.sourceid.saml20.service.impl.localmemory.InterReqStateMgmtMapImpl] getAttr(键: GEZIxxzzgrJ1Wq0vFoSY09,名称: HtmlFormIdpAuthnAdapter:SESSION )
甚至是赠款管理页面( ~/as/grants.oauth2)。但是,其他授权管理端点将其会话放到状态映射中,为name: attrs和name: csrfToken。
org.sourceid.saml20.service.impl.localmemory.InterReqStateMgmtMapImpl getAttr(键: GEZIxxzzgrJ1Wq0vFoSY09,名称: attrs) 2016-02-18 08:30:39,404 tid:b4ryqAPIEA6R0ywXzVmC6XtykHc调试org.sourceid.saml20.service.impl.localmemory.InterReqStateMgmtMapImpl getAttr(密钥: GEZIxxzzgrJ1Wq0vFoSY09,名称: csrfToken)
因此,基本上,当我通过适配器端点撤销会话时,它会删除所有HtmlFormIdpAuthnAdapter:SESSION值。
removeAttr(键: GEZIxxzzgrJ1Wq0vFoSY09,名称:会话) 2016-02-18 08:27:35,407调试removeA ttr在InterReqStateMgmtMapImpl状态映射大小上的调用:11属性map size9 2016-02-18 08:27:35,409 tid:b4ryqAPIEA6R0ywXmC6XtykHc org.sourceid.saml20.service.impl.grou prpc.InterRequestStateMgmtGroupRpcImpl mode:GET_MAJORITY removeAttr() on 10.0.12.90:7600,1 0.0.12.126:7600
但是,grants.ping添加的内容仍然存在。所以我可以从这个端点获得授权管理页面,但是另一个端点需要登录。
我还尝试了idp/startSLO.ping注销端点。
只有当我在该会话上获得访问令牌时,它才能工作并撤消所有会话(甚至是最后一个会话)。
否则,如果我直接登录到授权管理页面并调用idp/startSLO.ping,我将从服务器获得一个错误。
org.sourceid.websso.servlet.IntegrationControllerServlet GET:https://localhost:9031/idp/startSLO.ping 2016-02-18 08:31:34,705 tid:b4ryqAPIEA6R0ywXzVmC6XtykHc调试org.sourceid.saml20.service.impl.grouprpc.PreferredNodes GET:https://localhost:9031/idp/startSLO.ping 2016-02-18 08:31:34 705 tid:b4ryqAPIEA0yzVmC6XtykHc调试org.sourceid.saml20.service.impl.grouprpc.PreferredNodes ->索引地址-> 10.0.12.90:7600,10.0.12.126:7600 2016-02-18 08:31:34,708除错org.sourceid.saml20.service.impl.localmemory.IdpSessionRegistryMapImpl getRegistered(3AeDfSHVS1F0JU4nwgLsPJ)找到空authn 2016-02-1808:31:34,708在org.sourceid.saml20.service.impl.localmemory.IdpSessionRegistryMapImpl@e599115{bean->sessionLists=0,断言0,>bean=0上发现getRegistered的调试com.pingidentity.jgroups.MuxInvocationHandler调用pfsessionid->beanSets=6} 2016-02-18 08:31:34,708 tid:b4ryqAPIEA6R0ywXmC6XtykHc调试org.sourceid.saml20.service.impl.grouprpc.IdpSessionRegistryGroupRpcImpl,mode:GET_MAJORITY getRegistered() on 10.0.12.90:7600,10.0.12.126:7600 -02-1808:31:34,709 tid:31:34,709 tid:b4ryqAPIEA6R0ywXzVmC6XtykHc调试org.sourceid.saml20.bindings.BindingServiceImpl没有传输请求消息,因为HTTP响应已经提交(这通常是一个适配器或其他组件重定向用户或将自己的内容写入响应的正常情况)。
org.sourceid.saml20.service.impl.localmemory.IdpSessionRegistryMapImpl getRegistered(3AeDfSHVS1F0JU4nwgLsPJ)找到了空的authn 2016-02-18 08:31:34,707调试com.pingidentity.jgroups.MuxInvocationHandler调用on org.sourceid.saml20.service.impl.localmemory.IdpSessionRegistryMapImpl@dec9571{bean->sessionLists=0,assertionId>bean=0,pfsessionid->beanSets=6}*
并且还启用了注销和注销时的用户会话跟踪。
基本上,我需要找到一种方法来使我的授权管理页面只使用defaulthtmlform适配器。
发布于 2016-02-18 15:16:04
我想您是在使用/idp/startSLO.ping端点进行注销吗?(而不是仅在适配器上定义的注销端点?)
我相信我能复制你看到的东西。我怀疑您在OAuth授权服务器设置(异步前端通道注销机制(文档)的一部分)中启用了“跟踪用户注销会话”,但您没有“注销时撤消用户会话”(我们服务器端跟踪的一部分)。
尝试启用“在注销时撤消用户会话”,并查看这是否解决了问题。
https://stackoverflow.com/questions/35439657
复制相似问题