【发布时间】:2018-06-20 12:52:54
【问题描述】:
背景信息:
- Pingfederate v8.4.1.0 独立版(开发中)
- Pingfederate v8.4.1.0 集群 1 个控制台; 4 个引擎(生产中)
- ReferenceID 适配器版本 1.3.1
- Ubuntu 16.04
我目前正在实现一个自定义 Idp 适配器,它基本上包装了 ReferenceID 适配器并添加了其他功能。 我正在使用 TransactionalStateSupport 使 oauth-client-id(在第一个 HTTP 请求期间可作为查询参数使用)在整个事务中可访问。 不幸的是,这对我来说效果不佳。
值似乎没有被存储:
String resumePath = (String)inParameters.get("com.pingidentity.adapter.input.parameter.resume.path");
TransactionalStateSupport txStateSupport = new TransactionalStateSupport(resumePath);
String name="foo";
String value="bar";
txStateSupport.setAttribute(name, value, req, resp);
String value2 = (String) txStateSupport.getAttribute(name, req, resp);
System.out.println("Value directly after storing: " + value2);
if(!value.equals(value2))
System.out.println("**** STORAGE FAILED ****");
输出:
B3E085C450 : Message{partnerRole=null, entityId='null', msg={partnerEntityID=testclient, scope=openid email profile, com.pingidentity.adapter.input.parameter.tracking.id=tid:cBAmXoOGkUCQXCSjRJ4quIlV5DE, response_type=code, redirect_uri=http://localhost.dev, sessionid=D5ZaljlkoPc6Bdv5l37IiyQikCK, client_id=testclient, com.pingidentity.plugin.instanceid=asd}}
2018-06-20 14:10:47,191 tid:4zBU2dUsYh8O-IRvXFjX3WOylLc DEBUG [org.sourceid.servlet.HttpServletRespProxy] adding lazy cookie Cookie{PF=hashedValue:yF4bj2jqUXu6jvMw0rBOVDuATWs; path=/; maxAge=-1; domain=null} replacing null
2018-06-20 14:10:47,191 tid:4zBU2dUsYh8O-IRvXFjX3WOylLc DEBUG [org.sourceid.saml20.service.impl.localmemory.InterReqStateMgmtMapImpl] setAttr(oldKey: null, newKey: yF4bj2jqUXu6jvMw0rBOVDuATWs, name: foo||h6tCJ)
2018-06-20 14:10:47,191 tid:4zBU2dUsYh8O-IRvXFjX3WOylLc DEBUG [org.sourceid.saml20.service.impl.localmemory.InterReqStateMgmtMapImpl] setAttr: new size of attribute map=3
2018-06-20 14:10:47,192 tid:4zBU2dUsYh8O-IRvXFjX3WOylLc INFO [SystemOut] Value directly after storing: null
2018-06-20 14:10:47,192 tid:4zBU2dUsYh8O-IRvXFjX3WOylLc INFO [SystemOut] **** STORAGE FAILED ****
有没有人对此有解决方案,或者知道为什么这个过程会失败?
提前谢谢你
【问题讨论】:
-
同样在同一个事务中的第二个请求,该值不存在于事务中。我也使用 SessionStateSupport 进行了尝试,但这似乎也不起作用。我不知道我做错了什么。
-
你可以使用会话状态而不是事务状态,就像在github.com/zandbelt/pf-store-query-params-adapter-selector中所做的那样
-
试过了,但也没有用....我让它工作了一次,那是我已经存储了一个 PF cookie 的时候。但是删除 cookie 后,它就不再起作用了……猜猜在没有 cookie 的情况下应该无法读取 SessionStateSupport/TransactionalStateSupport(结果为 null),但应该仍然可以写入,不是吗?
-
我相信两者都需要 cookie:PF cookie 值是对服务器状态会话缓存的引用
-
Hans 是正确的 - 在用户进行会话之前,您无法对状态/会话管理进行任何操作,而这在将 cookie 写入浏览器之前不会发生。
标签: java pingfederate