openid RP не поддерживает сеанс между звонками провайдеру

У меня есть работающее приложение "проверяющая сторона", в котором используется третья сторона OpenID провайдер для входа. Однако, если я попытаюсь войти в систему с "доморощенным" OpenID провайдер, который использует org.openid4java.server.SampleServerсеанс не поддерживается между beginConsumption а также endConsumption,

Я вижу успешное открытие и ассоциацию, причем это достигается весной OpenID4JavaConsumer:

DiscoveryInformation information = consumerManager.associate(discoveries);
req.getSession().setAttribute(DISCOVERY_INFO_KEY, information);

Но после моего ОП делает аутентификацию и response.sendRedirectвозвращается к RP, там начинается новый сеанс, и я получаю ошибку в OpenID4JavaConsumer.endConsumption:

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 ответ

Я смог пройти мимо этого с помощью кода 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 не упомянули об этом как о возможной необходимости, что заставляет меня задуматься о том, "неправильно" ли мои настройки каким-либо другим способом. Onward...

Другие вопросы по тегам