Session openid RP不在调用提供程序之间维护会话

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

我有一个工作依赖方应用程序,使用第三方OpenID提供程序进行登录。但是,如果我尝试使用使用org.openid4java.server.SampleServer的自制OpenID提供程序登录,则不会在beginConsumption和endConsumption之间维护会话

我可以在springs OpenID4JavaConsumer中看到成功的发现和关联:

但是在我的OP进行身份验证和响应之后。sendRedirect返回RP,一个新的会话在那里启动,我在OpenID4JavaConsumer.endConsument失败:


创建新会话的原因是什么?我如何保留旧会话?

我可以通过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;
}