サービス プロバイダー サイトで OpenSAML を使用して、クライアントに SSO を提供しています。私たちのクライアント (ID プロバイダー) は、最後に OpenSSO を使用しています。OpenSSO によってポストされる SAML 応答は、名前空間によって修飾されていない署名要素に関しては少し異なります。これは OpenSAML ではうまくいかないようで
samlResponse.getSignature()
、署名を検証できないため、メソッドから null が返されます。
問題を引き起こしている SamlReponse の署名スニペット
<Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<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="#s2d10cccbd58d1f78c2c76c74c82a236548c929ffd">
<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>j+KBoDOtEcyCquPTxRCXoBulStQ=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>Dv+owuZfGFymGGrw2gHA3/7GVC6mXt8JMW+tOvmtnjTRJZaDE+Nb2NCngio1Tnqu4LWnvVrry4Wk... 6QcIJi/kGc4YFMSQj/Q=</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIIEhDCCA+2gAwIBAgIQXxhipi2wpPxWi7MTVfFVHDANBgkqhkiG9w0BAQUFADCBujEfMB0GA1UE... 78Q/lRQuBhHMy02lKctnwjBeEYA=</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
機能する別の SAML レスポンスからの署名スニペット
<dsig:Signature xmlns="http://www.w3.org/2000/09/xmldsig#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<dsig:Reference URI="#id-TtLltjcBSOAJ6OipumUEj8o0Qag-">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>5c95zhA139qzMvZA2A445F3LWaU=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>JsmRFJn1CjClHs4rf0hrwKzOq6ZtmnOEm/PNiaJvYurko/ZP+PApWhk55x0unIVwZ6XDv3k8Dj81WqUl07J0Dkvzp71bccIgiGTRzoNPT71nBAXxJmZiXz51JWctg13zjxP0oQMSpWytKCrFkCkJ0So3RQl3WixYV3miK0YjJnM=</dsig:SignatureValue>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
</ds:KeyInfo>
</dsig:Signature>
上記からわかるように、OpenSSO サーバーからの署名スニペットには、SAML バインディング仕様で指定されている名前空間修飾子が含まれていません。
私にとっての最後のオプションは、OpenSAML ライブラリを機能させるために署名要素の前に名前空間を追加するために投稿された SAMLResponse のいくつかのマッサージを行うことです。
OpenSAML ライブラリを使用してこれを解決する方法についてのアイデアは高く評価されています。
よろしくお願いします CJ