2009-08-31 16 views
3

私はWCFサービスを別のマシンに展開しており、WCFサービスに対してクライアントを認証したいと考えています。私は匿名アクセスをオフにし、「統合Windows Authenfication」チェックボックスをチェックしてIISでWCFサービスでの認証

1):

私は次のことを行っています。私は以下のようにユーザーの資格情報を渡しています

2クライアント側で)私のウェブ設定

<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"; 

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

資格情報が渡されたことをユーザーに認証する方法を教えてください。

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

答えて

6

サーバー側では、Windows資格情報を渡してActive Directoryに対して認証するか、代替ストアを使用してユーザー認証を処理する必要があります。

あなたは使用してサーバー側のコードに呼び出し元のIDにアクセスすることができます。

IIdentity caller = ServiceSecurityContext.Current.PrimaryIdentity; 

をまた

ServiceSecurityContext.Current.WindowsIdentity 
をチェックして(あなたのサンプルのように)そのWindows資格情報と呼ばれるWindowsユーザーかどうかを確認することができます

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をチェックして、誰が呼び出しているかについて知ることができます。

MSDN docsで、サービスセキュリティコンテキストで利用可能なものの詳細、またはWindows identityを確認してください。

マーク

+1

こんにちはマーク、 お返事ありがとうございます。 ユーザーがWindowsドメインにアカウントを持つように要求するセキュリティモデルが必要です。 –

+1

現在のサンプルでは、​​SQL Serverデータベースを使用してユーザー情報を格納する必要がありますが、これは必要ありません。ユーザーをアクティブディレクトリに対して検証する必要があります。現在のドメインに存在するかどうか。ユーザーがどのグループなど...で、その後存在する場合 –

+0

は、このコードは私のシナリオで動作するかどうAD認証に –

0

カスタムユーザー名とパスワードバリデーターが必要なようです。すべての手順をカバーするMSDNの記事があります:How to: Use a Custom User Name and Password Validator

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

+0

ご回答ありがとうございます。 ドメイン内に存在する場合は、ユーザーを認証する必要があります。 たとえば、ドメインが「abcd」の場合 私のユーザーは「user1」 トラップできる場所を特定する必要がありますuser1とドメイン内に存在するかどうかを確認してください。 –

+0

まっすぐなWindows認証を使用している場合は、上記のmarc_sの回答が参考になります。 – bobbymcr

関連する問題