Session openid RP不在调用提供程序之间维护会话
我有一个工作依赖方应用程序,使用第三方OpenID提供程序进行登录。但是,如果我尝试使用使用org.openid4java.server.SampleServer的自制OpenID提供程序登录,则不会在beginConsumption和endConsumption之间维护会话 我可以在springs OpenID4JavaConsumer中看到成功的发现和关联: 但是在我的OP进行身份验证和响应之后。sendRedirect返回RP,一个新的会话在那里启动,我在OpenID4JavaConsumer.endConsument失败:Session openid RP不在调用提供程序之间维护会话,session,openid,session-state,httpsession,openid4java,Session,Openid,Session State,Httpsession,Openid4java,我有一个工作依赖方应用程序,使用第三方OpenID提供程序进行登录。但是,如果我尝试使用使用org.openid4java.server.SampleServer的自制OpenID提供程序登录,则不会在beginConsumption和endConsumption之间维护会话 我可以在springs OpenID4JavaConsumer中看到成功的发现和关联: 但是在我的OP进行身份验证和响应之后。sendRedirect返回RP,一个新的会话在那里启动,我在OpenID4JavaConsum
创建新会话的原因是什么?我如何保留旧会话?我可以通过OP代码中的以下内容来克服此问题:
Cookie sessionCookie = getSessionCookie(request.getCookies());
if (sessionCookie != null) {
response.addCookie(sessionCookie);
}
String url = response.encodeRedirectURL(responseBody);
response.sendRedirect(url);
及
从表面上看,这是有道理的,但OpenId SampleServer类或文档没有提到这一可能的需求,这让我怀疑我的设置是否在其他方面是错误的。向前
DiscoveryInformation discovered =
(DiscoveryInformation) request.getSession().getAttribute(DISCOVERY_INFO_KEY);
if (discovered == null) {
throw new OpenIDConsumerException("DiscoveryInformation is not available. Possible causes are lost session or replay attack");
}
Cookie sessionCookie = getSessionCookie(request.getCookies());
if (sessionCookie != null) {
response.addCookie(sessionCookie);
}
String url = response.encodeRedirectURL(responseBody);
response.sendRedirect(url);
private Cookie getSessionCookie(Cookie[] cookies) {
for (Cookie cookie : cookies) {
if (cookie.getName().equalsIgnoreCase("JSESSIONID")) {
return cookie;
}
}
return null;
}