застрял с этой проблемой в течение долгого времени, любая помощь приветствуется.
Я реализую SSO-аутентификацию Spring SAML для моего приложения.На самом деле это огромный файл конфигурации безопасности, поэтому я приложу только ту часть конфигурации, которая, на мой взгляд, может быть важной.
@Bean
public MetadataGenerator metadataGenerator() {
MetadataGenerator metadataGenerator = new MetadataGenerator();
metadataGenerator.setEntityId(env.getProperty("saml.entity.id"));
metadataGenerator.setExtendedMetadata(extendedMetadata());
metadataGenerator.setIncludeDiscoveryExtension(false);
metadataGenerator.setKeyManager(keyManager());
return metadataGenerator;
}
@Bean
@Qualifier("idp-ssocircle")
public ExtendedMetadataDelegate ssoCircleExtendedMetadataProvider() throws MetadataProviderException {
String idpSSOCircleMetadataURL = env.getProperty("saml.provider.url");
HTTPMetadataProvider httpMetadataProvider = new HTTPMetadataProvider(this.backgroundTaskTimer, httpClient(),
idpSSOCircleMetadataURL);
httpMetadataProvider.setParserPool(parserPool());
ExtendedMetadataDelegate extendedMetadataDelegate = new ExtendedMetadataDelegate(httpMetadataProvider,
extendedMetadata());
extendedMetadataDelegate.setMetadataTrustCheck(true);
extendedMetadataDelegate.setMetadataRequireSignature(false);
backgroundTaskTimer.purge();
return extendedMetadataDelegate;
}
Значения файла свойств, которые мы использовали в этом bean-компоненте, -
saml.entity.id=urn:saml2:test:s
saml.provider.url=https://fedsvc-stage.pwc.com/ofiss/FederationMetadata/2007-06/FederationMetadata.xml
Мое весеннее приложение размещено на локальном компьютере, а IDP общедоступен.Я добавил запись в файл hosts, поэтому мой ip сопоставлен с mysso.com
Теперь я пытаюсь получить доступ к URL-адресу, стоящему за аутентификацией SAML -
http://mysso.com:8080/sso-self/auth/login
Пользователь get перенаправлен наIDP, где он вводит учетные данные и после успешной аутентификации пользователь перенаправляется обратно на - http://localhost:8080/sso-self/saml/SSO, с ответом saml, но я получаю 404 в браузере и следующую ошибку на консоли -
org.opensaml.common.SAMLException: InResponseToField of the Response doesn't correspond to sent message a330ei589j3e99ee10d8a55bghc518i
ПроблемаЯ вижу, что сообщение хранится и извлекается из двух разных сеансов, так как первый запрос пришел с доменного имени mysso.com , но ответ возвращается сюда localhost
здесьмой XML-файл AuthnRequest, который отправляется в IDP
<?xml version="1.0" encoding="UTF-8"?><saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL="http://localhost:8080/madison-sso-self/saml/SSO" Destination="https://fedsvc-stage.pwc.com/ofiss/" ForceAuthn="false" ID="a345ia5236e6hc2g48ea13fcf4386h7" IsPassive="false" IssueInstant="2018-12-18T07:46:41.812Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0">
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">urn:saml2:test:s</saml2:Issuer>
</saml2p:AuthnRequest>
Все, что я мог понять, это значение AssertionConsumerServiceURL в AuthnRequest http://localhost:8080/madison-sso-self/saml/SSO, и поэтому он возвращается к этому URL.Теперь я не понимаю, почему это значение является localhost вместо моего имени хоста, которое http://mysso.com:8080/madison-sso-self/saml/SSO.
Пожалуйста, ответьте, если вам понадобится дополнительная информация, чтобы понять это.Заранее спасибо.