3

別のマシンにWCFサービスを展開していて、WCFサービスに対してクライアントを認証したいと考えています。

私は次のことをしました:

1)IISで、匿名アクセスのチェックを外し、[統合されたWindows認証]チェックボックスをオンにしました。

2)私のWeb構成

 <authentication mode="Windows" />
 <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBind">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>

3)クライアント側では、次のようにユーザー資格情報を渡します。

MyServiceClient _client;

_client = new MyServiceClient();

_client.ClientCredentials.Windows.ClientCredential.UserName = "username";
_client.ClientCredentials.Windows.ClientCredential.Password = "password";
_client.ClientCredentials.Windows.ClientCredential.Domain = "mydomain";

私の質問は、サーバー側(サービスが展開されている場所)でユーザー名とパスワードをトラップするにはどうすればよいですか?

渡されたクレデンシャルに対してユーザーを認証するにはどうすればよいですか?

現在、basichttpバインディングを使用しています..このバインディングはセキュリティモデルをサポートするのに十分ですか?

4

2 に答える 2

6

サーバー側では、渡されたWindowsクレデンシャルを使用してActive Directoryに対して認証するか、ユーザー認証を処理するために代替ストアを使用する必要があります。

次を使用して、サーバー側コードで発信者のIDにアクセスできます。

IIdentity caller = ServiceSecurityContext.Current.PrimaryIdentity;

また、Windowsユーザーが(サンプルのように)Windowsクレデンシャルを使用して呼び出したかどうかを確認するには、

ServiceSecurityContext.Current.WindowsIdentity

NULLの場合、Windowsクレデンシャルは渡されていません。それ以外の場合は、このWindows IDを使用して、誰が呼び出しているか(名前など)を確認できます。ただし、ユーザーのパスワードを読み取ることはできません。彼の名前、彼が所属するグループなどを確認できます。

Windows / Active Directory検証を使用するには、clientCredentialTypeを「Windows」に設定します。wsHttpBinding、またはさらに良い方法であるnetTcpBindingに切り替える必要がある場合があります(ファイアウォールの背後にあるWindows LANを使用している場合)。

<bindings>
  <netTcpBinding>
    <binding name="WindowsSecured">
      <security mode="Transport">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>

これにより、Windowsドメインに登録されているユーザーのみがサービスを呼び出すことができます。他のユーザーは、あなたの側で追加の作業を行わずに拒否されます。

Windowsユーザーに電話をかけてもらうと、誰が電話をかけているのかについて、ServiceSecurityContext.Current.WindowsIdentityを確認できます。

サービスセキュリティコンテキストまたはWindowsIDで利用できるものの詳細については、MSDNドキュメントを確認てください。

マーク

于 2009-08-31T06:38:49.083 に答える
0

カスタムユーザー名とパスワードバリデーターが必要なようです。すべての手順をカバーするMSDNの記事があります。方法:カスタムユーザー名とパスワードバリデーターを使用します

BasicHttpBindingは、さまざまなセキュリティモードをサポートしています。オーバーロードされたコンストラクターを使用する場合は、BasicHttpSecurityModeに選択した値を渡すことができます。

于 2009-08-31T06:28:19.400 に答える