1

次のコードを実行すると(ComponentSpace Saml 2.0 libが使用されます)、Fiddlerは、SAMLRequestの値がこのように暗号化されていることを示します<input type="hidden" name="SAMLRequest" value="PHNhbWxwOkF1dGhu....">。これはかなり予想される動作です。このコードは、SSO SAML2.0POSTプロファイルの最初のステップを実装します。コードには、あらゆる種類の暗号化を行うための証明書キーが指定されていないことに注意してください。したがって、ComponentSpace libは、どのキーを取得するかをどのように決定するのでしょうか。

   var authnRequest = new AuthnRequest
        {
            Destination = @"https://idpserver/...",
            Issuer = new Issuer(@"https://sp/..."),
            ForceAuthn = false,
            NameIDPolicy = new NameIDPolicy(null, null, true), 
            ProtocolBinding = SAMLIdentifiers.BindingURIs.HTTPPost,
            AssertionConsumerServiceURL = @"https://sp/..."
        };

        var relayState = RelayStateCache.Add(new RelayState(@"https://sp/...", null));

        ServiceProvider.SendAuthnRequestByHTTPPost(
            new HttpResponseWrapper(_context.Response), 
            @"https://idpserver/...", 
            authnRequest.ToXml(), 
            relayState);

ウィキペディアに書かれているのは、「SAMLRequestパラメーターの値はbase64エンコーディングです」ということだけです。キーがエンコードに使用されるものに関する情報はありません。

4

2 に答える 2

1

質問を誤解してすみません。サンプルコードは、authnリクエストを作成して送信しました。SAML応答に含まれるSAMLアサーションについて質問しているようです。

IDプロバイダーは、サービスプロバイダーの公開鍵を使用してSAMLアサーションを暗号化します。サービスプロバイダーは、秘密鍵を使用してアサーションを復号化します。

この例をご覧になりたい場合は、SAMLアサーションの暗号化/復号化を示すAssertionExampleプロジェクトをご覧ください。

指定したリンクのステップ2は、HTTP/POSTを介してIdPにAuthnRequestを送信するSPについて説明しています。AuthnRequestの送信に関連するXML暗号化はありません。XMLは、deflateとbase-64を使用してエンコードされますが、暗号化は使用されません。このエンコードは、ServiceProvider.SendAuthnRequestByHTTPPostを呼び出すときに実行されます。

于 2012-09-05T21:26:14.717 に答える
0

authnリクエストへの署名はオプションです。

リクエストに署名するには、ServiceProvider.SendAuthnRequestByHTTPPostを呼び出す前に、次のような操作を行う必要があります。

// Serialize to XML
XmlElement authnRequestElement = authnRequest.ToXml();

// Sign the authn request
SAMLMessageSignature.Generate(authnRequestElement, x509Certificate.PrivateKey, x509Certificate);

// Send the authn request to the IdP
ServiceProvider.SendAuthnRequestByHTTPPost(..., authnRequestElement, ...);

あなたは常にあなたの秘密鍵で署名し、受信者はあなたの公開鍵/証明書を使用して署名を確認します。

于 2012-09-05T04:25:33.257 に答える