ユーザーの X.509 証明書をカードから取得し、ASP.NET MVC でのフォーム認証のためにユーザー テーブルにマップする必要があります。VS 2008 で MVC (ver 2) プロジェクトを作成しました。このプロジェクトは、デフォルト テンプレートを使用して、Vista のローカル IIS のデフォルト Web サイトで仮想ディレクトリとして実行するように構成されていますが、アカウント/ログオン ActionResult に RequireHttpsAttribute を追加しました。その他の変更はありません。ローカルの IIS マネージャーを使用して、自己署名証明書を作成して適用し、Account/Logon.aspx ページを [SSL が必要] および [クライアント証明書が必要] に設定しました。
デバッグで実行し、ウェルカム ページ (ホーム/インデックス ビュー) から [ログオン] リンクをクリックすると、https を使用して Account/Logon.aspx に正しくルーティングされますが、証明書のプロンプトは表示されません。Dynatrace (すばらしい、http://ajax.dynatrace.com ) を使用すると、応答ステータスが 403 に設定されていることがわかりますが、やはり証明書プロンプトは表示されません。
健全性チェックとして、Vista の既定の Web サイト (上記の MVC プロジェクトと同じ) の仮想ディレクトリで実行する既定の asp.net Web アプリ プロジェクトをセットアップし、SSL が必要でクライアント証明書が必要になるように default.aspx ページを構成しました。上記の MVC プロジェクトで行ったように。実行して正常に動作し、証明書のプロンプトが表示され、証明書を選択してカードの PIN を入力し、コード ビハインドの request.clientcertificate オブジェクトから X.509 を読み取ることができます。
両方の仮想ディレクトリのアプリケーション プールは、統合パイプライン モードで Classic .NET AppPool に設定されます。
ヘルプ?!
更新: 非常に厄介な回避策が進行中です。「Auth」フォルダーと「GetCert.aspx」ファイルを MVC プロジェクトに追加し、「routes.IgnoreRoute("Auth/{*pathInfo}")」をグローバルに追加しました。 .asax. GetCert.aspx 応答の分離コードは、X.509 から必要なデータを書き込みます。次に、GetCert.aspx を呼び出す jquery.get 呼び出しを LogOn.aspx に追加し、証明書の件名の結果を文字列として LogOn.aspx の div に返します。cert プロンプトが表示され、MVC ビューで結果が表示されるようになりましたが、これでは実行できません!