Ping Federate генерирует ошибку: cvc-complex-type.2.4c: при проверке ответа SAML - PullRequest
0 голосов
/ 01 сентября 2018

Я отправляю ответ SAML Ping Federate. Если ответ SAML содержит атрибуты SAML, то он работает правильно, тогда как если ответ SAML не содержит атрибутов SAML, он выдает следующую ошибку:

Ответный XML недействителен. Ошибки: [ошибка: cvc-complex-type.2.4c: Атрибут ожидаемых элементов @ urn: oasis: names: tc: SAML: 2.0: утверждение EncryptedAttribute @ urn: oasis: names: tc: SAML: 2.0: утверждение 'перед конец содержимого в элементе AttributeStatement @ урна: оазис: имена: дц: SAML: 2,0: утверждение]

.

Ниже приведен ответ SAML (без атрибутов SAML), который выдает эту ошибку:

<?xml version="1.0" encoding="UTF-8"?>
<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://test/sp/ACS.saml2" ID="frtgckggfpwphf_vxeatxzlvgrq" IssueInstant="2018-08-30T11:50:38.183Z" Version="2.0">
    <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">Test</saml2:Issuer>
    <saml2p:Status>
        <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </saml2p:Status>
    <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_4947dc191f01c1e98d448c2fadd5c289" IssueInstant="2018-08-30T11:50:38.183Z" Version="2.0">
        <saml2:Issuer>Test</saml2:Issuer>
        <saml2:Subject>
            <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">testUser</saml2:NameID>
            <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <saml2:SubjectConfirmationData NotOnOrAfter="2018-08-30T11:52:38.183Z" Recipient="https://test/sp/ACS.saml2"/>
            </saml2:SubjectConfirmation>
        </saml2:Subject>
        <saml2:Conditions NotBefore="2018-08-30T11:50:38.183Z" NotOnOrAfter="2018-08-30T11:52:38.183Z">
            <saml2:AudienceRestriction>
                <saml2:Audience>TestAudience</saml2:Audience>
            </saml2:AudienceRestriction>
        </saml2:Conditions>
        <saml2:AuthnStatement AuthnInstant="2018-08-30T11:50:38.184Z" SessionIndex="_4947dc191f01c1e98d448c2fadd5c289">
            <saml2:AuthnContext>
                <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml2:AuthnContextClassRef>
            </saml2:AuthnContext>
        </saml2:AuthnStatement>
        <saml2:AttributeStatement/>
    </saml2:Assertion>
</saml2p:Response>

Я полагаю, это может быть из-за

<saml2:AttributeStatement/>

но онлайн-инструменты говорят, что приведенный выше XML действителен.

Требуется ли для Ping Federate определенный формат ответа SAML (т.е. без 'saml2: AttributeStatement', если отсутствуют атрибуты SAML), или это вообще совершенно другая проблема?

Спасибо

1 Ответ

0 голосов
/ 04 сентября 2018

В спецификации ядра SAML (https://docs.oasis -open.org / security / saml / v2.0 / saml-core-2.0-os.pdf ) указано:

2.7.3 Элемент <AttributeStatement>

Элемент <AttributeStatement> описывает утверждение, предоставленное полномочным органом SAML, что Тема утверждения связана с указанными атрибутами. Утверждения, содержащие <AttributeStatement> элементы, ДОЛЖНЫ содержать <Subject> элемент. Это типа AttributeStatementType, который расширяет StatementAbstractType с добавлением следующих элементов: <Attribute> или <EncryptedAttribute> [Один или несколько] <Attribute> Элемент указывает атрибут субъекта утверждения. Зашифрованный Атрибут SAML может быть включен в элемент <EncryptedAttribute>. Следующий фрагмент схемы определяет элемент <AttributeStatement> и его AttributeStatementType сложный тип:

<element name="AttributeStatement" type="saml:AttributeStatementType"/>
<complexType name="AttributeStatementType">
  <complexContent>
    <extension base="saml:StatementAbstractType">
      <choice maxOccurs="unbounded">
        <element ref="saml:Attribute"/>
        <element ref="saml:EncryptedAttribute"/>
      </choice>
    </extension>
  </complexContent>
</complexType>

Онлайн-инструменты, которые вы использовали, неверны (они, вероятно, просто проверяют XML вместо проверки по схеме SAML): вы должны включить <Subject> и "Один или несколько" Attribute (s) или EncryptedAttribute в AttributeStatement.

FWIW: если вы не собираетесь отправлять какие-либо атрибуты, вы можете пропустить AttributeStatement все вместе, просто отправка пустого нарушает спецификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...