6

とりわけ、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>
4

1 に答える 1

4

「なし」が最速です、はい:-)

一方、サービスとバックエンドが同じマシンで実行されている場合は、netNamedPipe バインディングも真剣に検討する必要があります。これは、「マシン上」の通信を行う場合に最適です。netTcp よりも高速で効率的です。

サービスに対して呼び出し元を認証するには、なんらかのセキュリティ方法を使用する必要があります。netNamedPipe は「none」または「Windows」のみをサポートするため、Windows を選択します。何も使用しない場合、呼び出し元を識別 (認証) する方法がないため、呼び出し元の ID に基づいて (誰が何をできるか) 承認を受けることができません。

呼び出し元 (私を呼び出している人) を認証したら、Windows グループまたは組み込みの ASP.NET メンバーシップ/ロール プロバイダー サブシステムを使用してロールベースの承認を行うことができます。何の操作。これは、サービス<serviceAuthoritzation>の構成の動作セクションで呼び出されるサービスの動作を使用して構成できます。

マルク

于 2009-08-23T09:20:09.007 に答える