13

私は IDP とやり取りしており、基本的な AuthNRequest を次のように作成しています。

<samlp:AuthnRequest
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="IDTest1" 
  Version="2.0"
  IssueInstant="2013-03-04T09:21:59"
  AssertionConsumerServiceIndex="0"
  AttributeConsumingServiceIndex="0">
  <saml:Issuer>https://myapp.com/saml2/sp</saml:Issuer> 
 <samlp:NameIDPolicy
   AllowCreate="true"
   Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>     

IDP は、署名済みのリクエストを送信するように要求しています。私の質問は次のとおりです。

  1. ダイジェスト値を設定するにはどうすればよいですか?
  2. 署名値を設定するにはどうすればよいですか?
  3. x509 証明書の場合、アプリの公開鍵を設定しました。正しい?
  4. 値の計算に使用されるデータは何ですか? 署名要素のないオリジナルの認証リクエストですか?
4

6 に答える 6

9

これの多くはドキュメントでカバーされていることに注意してください:

SAML メタデータ

リクエストに署名するには、次のようなものを追加する必要があります (通常は sp.xml にあります)。

<SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="false"
                 protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">

署名鍵は次のようになります。

<KeyDescriptor use="signing">
    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
            <ds:X509Certificate>
                MIIDWTC...CAkGgAwIBAgIEe+a+/uaSZCp5g2z+hRWRV+DyfQc9nO
            </ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</KeyDescriptor>

ここで、MII... は公開鍵です。

@Stefan によると、ライブラリを使用する方がはるかに簡単です。

于 2013-03-07T18:10:53.690 に答える
5

SAML認証要求はXMLドキュメントです。他のXMLドキュメントに署名するのと同じように、SAML認証要求に署名できます。ただし、いくつかの制限があります。

  1. 署名はエンベロープ署名である必要があります。
  2. ダイジェストされる前に、SAML認証要求は、エンベロープ署名変換と排他的正規化変換以外の方法で変換してはなりません。
  3. Signature要素には、Reference要素を1つだけ含める必要があります。
  4. 唯一の参照要素のURIには、署名されたSAML認証要求のID属性の値が含まれている必要があります。
  5. 署名する前に、SignedInfo要素は排他的な正規化メソッドを使用して正規化する必要があります。

SAMLアサーションとプロトコルの仕様( http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf )の詳細については、セクション5を参照してください。

于 2013-03-09T11:41:40.153 に答える
3

大きなフレームワークを使用せずに独自のリクエストを作成することに興味がある場合は、OpenSAML をお勧めします。SAML メッセージの構築を支援するライブラリです。

私の著書A Guide to OpenSAMLでは、これが詳細に説明されています。

EDIT OpenSAML V3をカバーする本の新版をリリースしました

SAML メッセージの署名について私が書いた例を次に示します。

そして、 AuthnRequests をディスパッチする方法についての 1 つ。

于 2013-03-07T09:46:01.063 に答える
2

セキュリティに関することは決して簡単ではありません... @nzpcmad によってリンクされたドキュメントと SAML2 プロファイルを必ず確認する必要があります(WB SSO - Web Browser Single Sign On を探してください)。

Java の場合、OpenSaml は確かに最も簡単なソリューションの 1 つです。

于 2013-03-08T11:49:16.807 に答える
1

落とし穴は、HTTP リダイレクト バインディングを使用すると、SAMLRequest 値の一部ではなく、追加の URL パラメータによって署名が転送されることです。たとえば、https ://my-idp.com/login?SAMLRequest=nVNN...%3D&SigAlg= http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=QZ64...%3D%3D

于 2017-03-20T11:19:52.973 に答える