WCF 証明書を使用したメソッドへのアクセスの制御

PrincipalPermissionAttribute クラスでアクセスを制限する より

Name プロパティを、サブジェクト名と証明書のサムプリントで構成される文字列に設定します。次の例に示すように、2 つの値をセミコロンと空白で区切ってください。

クライアント資格情報として証明書を使用している場合、既定では、証明書の共通名とサムプリントをセミコロンで連結して、クライアントのプライマリ ID を表す一意の値が作成されます。UseAspNetRoles をサービスの PrincipalPermissionMode として設定している場合、このプライマリ ID の値と Name プロパティの値を比較してユーザーのアクセス権が決定されます。

要するに「証明書による認証 (Authentication) がなされた場合、WCFの内部的なユーザ名は、共通名 CN + 拇印 で構成される」ということ。

ただし、ここのサンプル および WCF Step by Step 本 に出てきている証明書のサブジェクトは共通名だけを指定して作成したものであり、しかも英字だけで構成されている。

日本語 ActiveDirectory 環境での証明書サービスでユーザー証明書を作成した場合、以下のような状況が発生するため素直に使えるかどうかはかなり怪しい。要調査。

  • サブジェクトの CN 内に日本語が含まれる
  • 組織単位 OUの下にアカウントが存在する場合、サブジェクトに OU 名が含まれる
  • サブジェクトにドメインを示す DC が含まれる

安全を見込むのであれば、任意のサブジェクトを持つクライアント証明書発行 certreq.exe でやったように以下の手順を踏んで証明書を発行する。

  • クライアント側で自力で証明書要求を作成
  • WindowsServer 証明機関側で任意のSubjectを許可するテンプレートを作成し、それを利用する
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。