前回の続きです。
今、私達はX.509 証明書を利用してメッセージセキュリティを確立したWCFアプリケーションを構築しています。
クライアントの認証だけを証明書からユーザー名とパスワードに切り替えます。
参考になるドキュメントは次のページです。
方法 : カスタム ユーザー名およびパスワード検証を使用する
要点をまとめると
message clientCredentialType="UserName"
にして Behavior にて
userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="nsFileManagerServiceLibrary.CustomUserNameValidator, FileManagerServiceLibrary"
と記述します。
customUserNamePasswordValidatorType ですが、クラス名とカンマで区切ってアセンブリ名を記述します。
そしてそのクラス実装にて次のようにユーザー名とパスワードのチェックを行います。
(実際に運用する場合は管理者以外が編集できないデータベースから情報を取得してValidationします。)
コンパイルを通すには System.IdentityModel.dll を追加参照する必要があります。
サービス側の対応は以上です。
続いてクライアント側にてどのように設定するか調べてみましょう。
次のドキュメントを確認します。
要するに message clientCredentialType="UserName" の設定を追加して
次に示す通りユーザー名とパスワードを設定してからオペレーションを呼び出します。
試験してみます。
認証に成功しました!
また、誤ったユーザー名やパスワードを記入すると例外が発生して
オペレーションに失敗することを確認しました。
以上が自分が確認したかったWCFの機能です。
あとの運用面はC#の問題なので想像するだけで何でもできますね。
ユーザー認証と安全な情報交換が行えるネットワークアプリケーションが
WCFを使って簡単に構築できることを確認できました。
ユーザーはユーザー名とパスワードの組み合わせを他者に知られないように注意するだけでOKです。
クライアント側では証明書の作成は不要です。
(あ、初回登録時に匿名認証する必要がありますが、クライアントだけの認証をなくす場合はどうすれば…。
まぁ、きっと Behavior で ValidationMode とかに None を設定するとかでいけるでしょう。)
今回の範囲で簡単なネットワークアプリなら作れるようになったはずなので、ワクワクしています。
ここまで読み進めることが出来た読者の方にも同じ思いがあるのではないでしょうか?
少しでも機密性、整合性、および認証を確保した通信技術が読者
(未来の技術を忘れてしまった自分)に伝われば良いなぁと思いつつ
今回のネットワークのお勉強を終わろうと思います。
ここまでお付き合いいただき、ありがとうございました。
2014/01/19 最終更新