2014-09-03 2 views
2

Я ищу способ увеличить время истечения срока действия моих сообщений saml. Я использую Spring Security с SAML 1.0.0-RC2.Spring security Saml - Разница во времени между SP и IDP

В данный момент, если серверы ** время слишком разные, например. 5 минут, я получил следующую ошибку:

HTTP Status 401 - Authentication Failed:Error validating SAML message: SAML response is not valid; nested exception is org.opensaml.common.SAMLException: SAML response is not valid 

Я хочу установить время истечения срока действия до 10 минут, чтобы предотвратить эти ошибки. Я смотрел документацию, но я не понимаю, как изменить время истечения. Если я посмотрю раздел Configuration authentication object, можно будет изменить время истечения срока, но я не понимаю эту идею.

Может ли кто-нибудь помочь мне?

** Мой сервер (SP) и сервер клиента (IDP, скорее всего, сервер с установленной ADFS).


Съемка в темноте:

Мой samlAuthenticationProvider боб теперь выглядит следующим кодом:

<bean class="org.springframework.security.saml.SAMLAuthenticationProvider" id="samlAuthenticationProvider"> 
    <property ref="userDetailsService" name="userDetails"/> 
</bean> 

Могу ли я добавить ссылку на ExpiringUsernameAuthenticationToken класс там? А затем вызовите конструктор по адресу line 53?

+0

Другие сообщения об ошибках, которые вы получите, указывают на то, что ответное несоответствие responseSkew/time между SP и IdP: org.opensaml.common.SAMLException: время ответа на вопрос либо слишком старое, либо с датой в будущем, перекос 60, время 2015 -08-27T12: 40: 28.284Z, или время устранения ответа в LogoutResponse является либо слишком старым, либо с датой в будущем. –

ответ

8

После того, как Андерс Стефана, я знал, где искать! На самом деле документы действительно описывали эту вещь, я просто не подбирал ее: 10.3 Validity intervals. Приветствия Stefan за указание свойства responseSkew!

Просто добавьте свойство responseSkew к бобам WebSSOProfileConsumerImpl и SingleLogoutProfileImpl:

<bean id="webSSOprofileConsumer" class="org.springframework.security.saml.websso.WebSSOProfileConsumerImpl"> 
    <property name="responseSkew" value="600"/> <!-- 10 minutes --> 
</bean> 

<bean id="logoutprofile" class="org.springframework.security.saml.websso.SingleLogoutProfileImpl"> 
    <property name="responseSkew" value="600"/> <!-- 10 minutes --> 
</bean> 
+0

Его не работает в весеннем ботинке – Max

+0

@jacob, я использую grails, где даже после того, как я указал responseSkew как 60000, я все еще получаю эту ошибку! Любая помощь ??? В grails у меня нет объявления bean, поэтому все связано с конфигурационным файлом. поэтому он установлен отлично ..но все же я получаю такое же исключение – artapart

+0

@artapart: Извините, я никогда не работал с Grails в своей жизни, поэтому не знаю. Просто спросите об этом как о новом вопросе stackoverflow, поэтому сообщество Grails может помочь вам в этом! –

4

Похоже, что допустимое различие во времени жестко закодировано.

See this source file посмотреть на постоянный ответSkew. Значение по умолчанию - 60 секунд.

Я думаю, что ваш лучший вариант здесь - попытаться установить то же самое время на серверах.

+0

Большое спасибо, вы дали мне направление поиска проблемы. Но значение не является жестким кодом, оно дефолтовано на 60 секунд! –

+0

Правильно, извините, мой плохой –

0

Я знаю, ответ был выбран, но я делюсь решение, которое я нашел для тех, кто работает с Grails 3, весна безопасности ядро, SAML 2.0.

Мне нужно было установить maxAssertionTime значение вместе с responseSkew для WebSSOProfileConsumerImpl, чтобы иметь возможность получить ответ от IDP.

Смежные вопросы