1

私の顧客は ping フェデレート インストールを使用しており、互換性のない認証応答ドキュメントを生成しているようです。ドキュメントは整形式で、不正な文字が含まれていません。

大きな問題は、ドキュメントのノードのノード名に「ds:」が含まれていないことです。私の認証ライブラリ ( omniauth-saml ) は検証時に ds 名のみを検索するため、これは残念です。

ライブラリに問題がありますか?Ping Federate SAML ドキュメントに問題がありますか? XPath の「contains」ヘルパーを使用するようにマッチャーにパッチを適用し始めましたが、それでもドキュメントのダイジェストと証明書が正しい値に計算されません。

  1. ライブラリに問題がありますか?
  2. Ping Federate SAML ドキュメントに問題がありますか?
  3. Ping Federate ドキュメントは、正規化された場合でも検証する必要がありますか?

SAML 応答のサンプルを次に示します。

<samlp:Response Destination="http://a/dest" IssueInstant="2012-07-12T18:21:28.011Z" ID="a.valid.rand.id" Version="2.0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns="http://www.w3.org/2000/09/xmldsig#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://their/issuer</saml:Issuer>
  <Signature>
    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
      <Reference URI="#vZZQnHjOx1.u8c3uupdxDb_cmRu">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <DigestValue>some_digest_value</DigestValue>
      </Reference>
    </SignedInfo>
    <SignatureValue>some_signature_value</SignatureValue>
    <KeyInfo>
      <X509Data>
        <X509Certificate>their_well_formed_x509_cert</X509Certificate>
      </X509Data>
      <KeyValue>
        <RSAKeyValue>
          <Modulus>a_modulus</Modulus>
          <Exponent>AQAB</Exponent>
        </RSAKeyValue>
      </KeyValue>
    </KeyInfo>
  </Signature>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion Version="2.0" IssueInstant="2012-07-12T18:21:28.058Z" ID="SOME_ID">
    <saml:Issuer>http://their/issuer</saml:Issuer>
    <saml:Subject>
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">14096079</saml:NameID>
      <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <saml:SubjectConfirmationData NotOnOrAfter="2012-07-12T18:26:28.058Z" Recipient="http://link/back/to/me"/>
      </saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Conditions NotOnOrAfter="2012-07-12T18:26:28.058Z" NotBefore="2012-07-12T18:16:28.058Z">
      <saml:AudienceRestriction>
        <saml:Audience>http://an/audience/restriction</saml:Audience>
      </saml:AudienceRestriction>
    </saml:Conditions>
    <saml:AuthnStatement AuthnInstant="2012-07-12T18:21:28.058Z" SessionIndex="SOME_ID">
      <saml:AuthnContext>
        <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef>
      </saml:AuthnContext>
    </saml:AuthnStatement>
    <saml:AttributeStatement xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <saml:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" Name="uid">
        <saml:AttributeValue xsi:type="xs:string">a_uid</saml:AttributeValue>
      </saml:Attribute>
      <!-- removed all the other attributes -->
    </saml:AttributeStatement>
  </saml:Assertion>
</samlp:Response>
4

1 に答える 1

1

これをより公式な回答にする...

そのコード行の解釈は正しくない可能性があると思います。接頭辞が「ds」であると仮定せずに、dsig スキーマ (http://w3.org/2000/09/xmldsig#) に基づいてルックアップを行っていると思います。参照: http://www.germane-software.com/software/rexml_doc/classes/REXML/XPath.html

署名の検証が失敗した場合、問題はライブラリが CanonicalizationMethod (http://www.w3.org/2001/10/xml-exc-c14n#) を処理する方法に関係している可能性があります。

繰り返しになりますが、何百もの「既製品」の SAML 製品が PingFederate と相互運用可能です。あなたの問題が、PingFederate が SAML 2.0 仕様から誤って解釈した結果であるとしたら、私は驚きます。

于 2012-07-17T16:32:12.027 に答える