Весной SAML отправка неверного AuthNRequest - PullRequest
0 голосов
/ 18 декабря 2018

застрял с этой проблемой в течение долгого времени, любая помощь приветствуется.

Я реализую 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.

Пожалуйста, ответьте, если вам понадобится дополнительная информация, чтобы понять это.Заранее спасибо.

1 Ответ

0 голосов
/ 20 декабря 2018

Пожалуйста, смотрите следующий параграф в документации "spring-security-saml": https://docs.spring.io/autorepo/docs/spring-security-saml/1.0.x-SNAPSHOT/reference/htmlsingle/#chapter-troubleshooting Ошибка "InResponseToField не соответствует отправленному сообщению" во время SSO

MakeУбедитесь, что приложение использует один и тот же HttpSession при отправке запроса и получении ответа.Как правило, эта проблема возникает, когда запрос аутентификации инициализируется с адреса локального хоста или схемы http, в то время как ответ принимается по общему имени хоста или по схеме https.Например, при инициализации аутентификации с URL https://host:port/app/saml/login, ответ должен быть получен на https://host;port/app/saml/SSO,, а не http://host:port/app/saml/SSO или https://localhost:port/app/saml/SSO.

Проверьте, можно ли получить доступ к приложению с помощьюто же общедоступное DNS-имя вместо localhost

...