openid RP不保持对提供者的调用之间的会话

时间:2014-09-15 15:42:55

标签: session openid session-state httpsession openid4java

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

我可以看到成功的发现和关联,这可以通过spring DiscoveryInformation information = consumerManager.associate(discoveries); req.getSession().setAttribute(DISCOVERY_INFO_KEY, information); 来实现:

response.sendRedirect

但是在我的OP进行身份验证并且OpenID4JavaConsumer.endConsumption回到RP之后,会在那里启动一个新会话,我在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"); } 处失败了:

{{1}}

是什么导致创建此新会话以及如何保留旧会话?

1 个答案:

答案 0 :(得分:0)

我能够在OP代码中使用此功能:

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;
}

从表面上看,这是有道理的,但仍然觉得OpenId SampleServer类或文档没有提到这是一个可能的需要,这让我想知道我的设置是否错误"以某种其他方式。向前...