0

Как и когда поставщик услуг (Spring Security SAML) проверяет, устарели ли данные? У меня есть поставщик услуг, созданный и настроенный в webbapplication. Мой идентификатор провайдера ADFS 2.0 аутентифицирует и возвращает ответ SAML с утверждением. Это утверждение имеет «Условие» с флагами «NotBefore» и «NotOnOrAfter». На данный момент мое утверждение действительно в течение 1 мин.Истечение срока действия SAML в Spring безопасности

Когда я аутентифицирован, мой клиентский сеанс действителен в течение 10 минут. Это означает, что мое утверждение истечет, пока клиент-сессия останется действительной. Должен ли провайдер услуг обнаружить, что мое утверждение истекло, и поэтому попросите IDP повторно проверить подлинность? Что мне не хватает?

ответ

0

Я столкнулся с вашей проблемой и все еще расследую ее. Кажется, другое время между sp и isp. Вы можете проверить это расширение WebSSOProfileConsumerImpl, внедрение verifyAssertion method.Here это код прокомментировал:

@Override 
protected void verifyAssertion(Assertion assertion, AuthnRequest request, SAMLMessageContext context) throws AuthenticationException, SAMLException, org.opensaml.xml.security.SecurityException, ValidationException, DecryptionException { 

    /*// Verify storage time skew 
    if (!isDateTimeSkewValid(getResponseSkew(), getMaxAssertionTime(), assertion.getIssueInstant())) { 
     throw new SAMLException("Assertion is too old to be used, value can be customized by setting maxAssertionTime value " + assertion.getIssueInstant()); 
    }*/ 

    // Verify validity of storage 
    // Advice is ignored, core 574 
    verifyIssuer(assertion.getIssuer(), context); 
    verifyAssertionSignature(assertion.getSignature(), context); 

    // Check subject 
    if (assertion.getSubject() != null) { 
     verifySubject(assertion.getSubject(), request, context); 
    } else { 
     throw new SAMLException("Assertion does not contain subject and is discarded"); 
    } 

    // Assertion with authentication statement must contain audience restriction 
    if (assertion.getAuthnStatements().size() > 0) { 
     //verifyAssertionConditions(assertion.getConditions(), context, true); 
     for (AuthnStatement statement : assertion.getAuthnStatements()) { 
      if (request != null) { 
       verifyAuthenticationStatement(statement, request.getRequestedAuthnContext(), context); 
      } else { 
       verifyAuthenticationStatement(statement, null, context); 
      } 
     } 
    } else { 
     verifyAssertionConditions(assertion.getConditions(), context, false); 
    } 

} 
+0

Хмм я до сих пор не понимаю. Если я проверю подлинность и подожду около 5 минут. Мое утверждение будет недействительным, но мой клиентский сеанс действителен. Если я обновляю веб-страницу в браузере, не следует ли запускать метод verifyAssertion? – Robert

+0

Я предполагаю, но я не уверен, вам нужно снова войти в систему, если сервер истекает ваш auth. Возможно, 1 минута - это время, когда сервер сохраняет вашу аутентификацию. Вы могли видеть свою действительность сессии на странице индекса весны saml после того, как вы просто авторизовались. – Antonio