我有一个工作的“依赖方”应用程序,它使用第三方OpenID
提供程序进行登录。但是,如果我尝试使用OpenID
使用org.openid4java.server.SampleServer
的“本土”beginConsumption
提供商登录,则会话不会在endConsumption
和OpenID4JavaConsumer
之间维护。
我可以看到成功的发现和关联,这可以通过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}}
是什么导致创建此新会话以及如何保留旧会话?
答案 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类或文档没有提到这是一个可能的需要,这让我想知道我的设置是否错误"以某种其他方式。向前...