これは、使用しているバインディングに完全に依存しており、一般的な答えはありません。例えば
、あなたはNetNamedPipeBindingを使用して行う場合
myChannelFactory.Credentials.UserName.UserName = "username";
myChannelFactory.Credentials.UserName.Password = "password";
あなたはあなたの時間を無駄にしている。このデータで何もしませんバインディングクライアント側は、それがメッセージになりません、そして、それは勝ちましたサービス側では全くアクセスできません。
バインディングは、ユーザー名/パスワードの資格情報の使用を指定するセキュリティオプションで構成されている場合にのみ、このデータを消費します。そのようにするすべての標準バインディングは、認証のために資格情報を使用します。その結果は、casperOneが示すようにServiceSecurityContext
を介してサービスに表示され、パスワードデータは含まれません。
認証をサポートするには、データをメッセージヘッダーのどこかに格納する必要があります。正確にどこでどのような形で再び束縛依存であろうか。あなたはいつもそれらをoperationContext.IncomingMessageHeaders[1]
に見つけると仮定しないでください。
編集: あなたが探しているものを提供するカスタムバインディングを構築することができます。
サービス側で
CustomBinding binding = new CustomBinding(...);
binding.Elements.Insert(1,
SecurityBindingElement.CreateUserNameOverTransportBindingElement());
、UserNamePasswordValidator
を提供し、このような資格情報を設定します。
serviceHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode =
System.ServiceModel.Security.UserNamePasswordValidationMode.Custom;
servicehost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator =
new MyUserNamePasswordValidator();
ユーザー名とパスワードは、MyUserNamePasswordValidator
のValidate
方法に配信されます。
警告:セキュリティ保護されたトランスポートを使用している場合を除き、資格情報はメッセージヘッダーでクリアに送信されるため、これは安全な認証メカニズムではありません。
なぜこれが欲しいですか?追加の認証を実行しようとしていますか? – McKay