Мы используем 'spring-security-saml2-core: 1.0.4.RELEASE' для реализации единого входа.Но в одном случае мы получим эту ошибку: «InResponseToField ответа не соответствует отправленному сообщению a3b529hi99h247cj2b0670ja8a5fdcf».В этом случае необходимо выполнить следующие действия:
1.открыть страницу входа в систему на нашем веб-сайте
2.Не делать ничего и подождать 30 минут до истечения этого времени http-сеанса
3.Ввести пользователяимя и пароль, затем нажмите кнопку входа в систему
4. возникает ошибка 'InResponseToField ответа не соответствует отправленному сообщению'
Я обнаружил эту ошибку в коде ядра saml WebSSOProfileConsumerImpl.java
// Verify response to field if present, set request if correct
SAMLMessageStorage messageStorage = context.getMessageStorage();
if (messageStorage != null && response.getInResponseTo() != null) {
XMLObject xmlObject = messageStorage.retrieveMessage(response.getInResponseTo());
if (xmlObject == null) {
throw new SAMLException("InResponseToField of the Response doesn't correspond to sent message " + response.getInResponseTo());
} else if (xmlObject instanceof AuthnRequest) {
request = (AuthnRequest) xmlObject;
} else {
throw new SAMLException("Sent request was of different type than the expected AuthnRequest " + response.getInResponseTo());
}
}
Похоже, что saml проверит ответ с помощью 'messageStorage.retrieveMessage (response.getInResponseTo ())' И я обнаружил, что по умолчанию messageStorage - это HttpSessionStorage, который основан на HttpSession.
Так что я думаю, что по истечении времени сеанса messageStorage.retrieveMessage вернет ноль.
Поэтому я увеличил тайм-аут сеанса с помощью config 'server.servlet.session.timeout = 60m'. Однако он не работает.
По-прежнему возникает ошибка через 30 минут, а не через 60 минут.,Я ожидаю, что это не произойдет ошибка через 60 минут.Кто-нибудь может мне помочь?Большое спасибо!