とりわけ、Webサイトのバックエンドとして使用されるWCFサービスを実行しています。WebサイトとWCFサービスの両方が同じマシン上で実行されているため、パフォーマンスの観点から、netTcpBindingを使用してセットアップしました。
つまり、これらは同じボックスに存在するため、トランスポートレベルのセキュリティやメッセージレベルの暗号化についてはまったく気にしません。メッセージが傍受される可能性がある唯一の方法は、誰かがWebサーバー自体に侵入した場合です。侵入した場合、私はすでに大きな問題を抱えています。
だから私の質問は、クライアントとサーバーがすでに信頼できるサブシステム上にある場合、netTcpBindingを可能な限り高速にするためにどのような構成を使用できるかということです。
もちろん、答えは「なし」のセキュリティを使用することかもしれません。しかし、私の特定のケースでは、カスタムデータベースに対してUserName認証を使用する必要があります。UserName認証を引き続き使用するように構成できますが、証明書やエンドポイント間のデータの保護に煩わされることはありませんか?または、ユーザー名/パスワードを格納するためにカスタムSOAPヘッダーを使用してカスタム動作を実装する必要があるのでしょうか。そうすれば、セキュリティを「なし」に設定できますか?
サーバー構成
<netTcpBinding>
<binding name="Net_Tcp_Binding">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>
カスタムUserName認証を使用します-基本的に、すべての呼び出しはカスタムデータベースに対して認証および承認します。サービス側は、証明書を使用してクライアントとネゴシエートします。例:
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="Custom">
<authorizationPolicies>
<add policyType="MyAssembly.CustomAuthorizationPolicy,MyAssembly" />
</authorizationPolicies>
</serviceAuthorization>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyAssembly.CustomCredentialValidator,MyAssembly" />
<serviceCertificate x509FindType="FindBySubjectName" findValue="CN=servercert" storeLocation="LocalMachine" storeName="My" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
クライアント構成
<netTcpBinding>
<binding name="Net_Tcp_Endpoint">
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>