Конфигурация утверждения, действительного на дату и время

#itfoxtec-identity-saml2 #nemlogin

Вопрос:

Я реализую аутентификацию NemLog-in3 / OIOSAML 3 в своем веб-приложении .NET Core. До сих пор с большим успехом. У меня есть только один вопрос о проверке маркера безопасности при получении утверждения от IdP после аутентификации.

Когда я получаю утверждение от IdP, в ответе есть маркер безопасности с указанием даты и времени ValidFrom и ValidTo. Разница составляет 1 час, но в документации по тесту OIOSAML3 говорится, что утверждение «недействительно» и что ваш SP должен запретить пользователю входить в систему через 5 минут.

Вы не знаете, можно ли настроить допустимый период SecurityToken (установить его на 5 минут), возможно, при инициализации аутентификации SAML? Я знаю, что мог бы просто проверить ValidTo и добавить к нему 5 минут, но я бы предпочел, чтобы он работал динамически, со свойством ValidTo, если это возможно.

Ответ №1:

Conditions Элементы NotBefore и NotOnOrAfter действительны в течение часа, что является правильным. Ограничение на вход в систему на 5 минут должно было быть в SubjectConfirmation элементе NotOnOrAfter . Это похоже на ошибку в NemLog-in3?

Ответ NemLog-in3 SAML 2.0 authn:

 <Subject>
    <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" SPNameQualifier="https://saml.itfoxtecidentitysaml2-public-dev.sample">
        https://data.gov.dk/model/core/eid/professional/uuid/8e190635-4a9c-4748-91ed-24895f809647
    </NameID>
    <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <SubjectConfirmationData InResponseTo="_29a72131-ab30-4429-b083-b18db2d6160e" NotOnOrAfter="2021-09-08T13:22:32.062Z" Recipient="https://localhost:44310/Auth/AssertionConsumerService"/>
        </SubjectConfirmation>
    </Subject>
    <Conditions NotBefore="2021-09-08T12:22:31.843Z" NotOnOrAfter="2021-09-08T13:22:31.843Z">
    <AudienceRestriction>
        <Audience>
            https://saml.itfoxtecidentitysaml2-public-dev.sample
        </Audience>
    </AudienceRestriction>
</Conditions>
 

Комментарии:

1. Я основал наше решение на вашем примере проекта TestWebAppCoreNemlogin3Sp, и когда я смотрю в ответе, который я получаю в конечной точке утверждения, я не могу найти подтверждение субъекта на объекте? Может быть, я ищу его не в том месте?

2. Я проверяю подтверждение субъекта не позже github.com/ITfoxtec/ITfoxtec. Identity.Saml2/blob/master/src/.. … Но нет свойства, позволяющего легко получить доступ к объекту подтверждения. Вы можете получить доступ к элементу так же, как и в методе ValidateAssertionExpiration.

3. Итак, вы хотите сказать мне, что это встроено в функциональность вашего пакета NuGet? Если я использую ваш метод «ReadSamlResponse» для чтения ответа

4. Он проверяется путем вызова метода Unbind, который вызовет исключение, если время неверно. Метод ReadSamlResponse считывает только ответ.

5. Ладно, я все понял. Кроме того, я действительно думаю, что в утверждении есть ошибка, так как дата и время, передаваемые в мой кэш символов, на самом деле являются всего лишь приблизительно датами и временем. UtcNow, так что все зарегистрированные просто немедленно истекают