1

誰か(つまり、私が知っている人)が私のサービスを利用できるようにWCFサービスをホストしている場合、他の誰か(つまり、私が知らない人)がそれを利用するとどうなりますか?どうすればそれを防ぐことができますか?これはどのように達成できますか?

それはサービススロットリングを通じて行うことができますか、それともこれを達成する他の方法は何ですか?

4

2 に答える 2

2

一部のクライアントがサービスを使用(または表示)できるようにし、一部のクライアントがサービスの使用(または表示)を許可されないようにする場合は、許可したクライアントのみがアクセスできるように、サービスで認証を設定する必要があります。 (または表示)あなたのサービス。

シナリオ全体はわかりませんが、基本認証を使用したトランスポートセキュリティで十分でしょう。IISで匿名アクセスを無効にすることを有効にするには、基本認証を使用するようにIISを構成してから、バインディング構成セットで次のようにします。

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>


デフォルトのmexHttpBindingの代わりにセキュアバインディングを使用するようにmexバインディングを設定します。また、サイトのSSL証明書も必要になります(WSHttpBindingを使用している場合)。

更新:これは、セキュアメタデータエンドポイントを使用してサービスを実装する方法を示す サンプルのカスタムセキュアメタデータエンドポイントです。

于 2009-08-07T06:24:05.130 に答える
1

いいえ、WCFには、特定のクライアントが他のクライアントを禁止しながらサービスを使用できるようにするメカニズムはありません。別の角度からこれにアプローチする必要があります。

1つの方法は、サービスからメタデータを自動的に公開しないことです(たとえば、ほとんど「見えない」ようにします)。次に、接続するクライアントに1つまたは複数のWSDLおよび1つまたは複数のXSDファイルの形式で必要なメタデータ情報を配布します。あなたのサービス。メタデータが利用できない場合、サービスアドレスを参照しているだけでは、何を呼び出すかについての情報は得られません。

メタデータ交換は、<serviceMetadata>動作と、サービスに「mex」エンドポイントを設定することによって制御されます。両方を削除すると、サービスは表示されなくなります。

もう1つの方法は、ファイアウォールとネットワークルールに基づいて、外部ユーザーがWCFサーバーにアクセスすることを禁止することです。これはWCFでは実行できませんが、ネットワーク管理者は、WCFサービスが実行されているマシンに物理的にアクセスできるIPを制限できます。

マーク

更新:
サービスを呼び出すことができるはずのユーザーにメタデータを送信するには、次の2つのいずれかを実行できます。

1)を使用しsvcutil.exe /t:metadata (path+name of your service assembly)て、サービスアセンブリからメタデータを抽出できます(例MyServiceLibrary.dll)。これにより、1つまたは複数のWSDLファイルと1つまたは複数のXSDファイルが提供され、目的のユーザーに出荷する必要があります。これらのファイルをハードディスクのどこかに置き、[サービス参照の追加]にURLを入力してサービスを検出する代わりに、メインのWSDL(他のすべてのファイルをインポートする)の名前を入力すると、次のようになります。クライアントプロキシを取得します。

または:

2)サービスが稼働している状態で、ソリューションに「新しいプロジェクトを追加」し、クラスライブラリ(MyService.Client)を選択してから、「サービス参照の追加」を実行してサービスのURLを入力できます。これにより、必要なすべてのファイルとすべてが新しいクラスライブラリに作成されます。MyService.Client.dllこのクラスライブラリをコンパイルし、サービスへのアクセスを許可するユーザーにそのアセンブリを出荷します。

どちらのソリューションでも、メタデータ交換を有効にする必要はありません。また、他の誰かがサービスにアクセスして、サービスを呼び出すために必要なすべての情報を取得することはできません。

于 2009-08-07T06:15:31.480 に答える