私は、より包括的なソリューションの断片を探して Web を精査しました。うまくいかなかったので、助けを求めます。
問題: Windows 統合認証を使用する .Net/C# WebApp があります。このアプリケーションは、ユーザーが要求を送信できるようにするカスタム フォーム アプリケーションです。これらの要求は、要求を確認して承認する監督者やその他の関係者に転送されます。
監査目的で、私は各監督者にフォームに「署名」してもらう必要があります。簡単な解決策 - アクティブなブラウザー セッション情報を使用します。ユーザーが「承認」ボタンをクリックすると、その情報がデータベースに記録されます (ID と日時)。しかし、監査人はこの解決策を好みません。彼らはそれを安全ではないと考えています。彼らは、ユーザーが ID とパスワードの入力を強制される資格情報について、別のチャレンジを望んでいます (そして、すぐに ID/パスワードの代わりにトークン/PIN の組み合わせを提示します)。
このフォームの infopath バージョンでこれを満たすために、CredUIPromptForCredentials を使用しました。そのコード (C# で記述されていますが) は、新しいカスタム WebApplication に直接移植されていません。私は掘り下げて、新しい CredUIPromptForWindowsCredentials に関する多くのリソースを明らかにしました。
Windows Vista/7 の C# で認証ダイアログを表示する
C# .Net 3.5 SP1 で認証ダイアログを表示する方法 Windows セキュリティ カスタム ログイン検証
これは、私が達成しようとしていることの真の精神です。上記の記事のコードにほとんど変更を加えずに (そして以前の InfoPath フォームのコードをいくつか借りて)、プロンプトとテストの機能するシステムを手に入れることができました。
誰かが興味を持っている場合は、喜んで既存のコードを共有したいと思いますが、上記の既存のコードと非常によく似ています (ほぼそのまま)。唯一の違いは、DirectoryEntry オブジェクトをインスタンス化し、そのオブジェクトを DirectorySearcher オブジェクトに渡して資格情報が機能するかどうかをテストすることによって、実際に資格情報をテストする個別の isAuthenticated メソッドです。
しかし、それほど速くはありません。私が言ったように、このコードは機能しますが、Visual Studios 2012 でデバッグ モードで実行した場合にのみ機能します。アドレスを入力してサイトにアクセスし、ボタンをクリックしてフォームに「署名」すると、サイトが回転し、セキュリティが表示されません。ダイアログ。Windows認証を許可するIIS設定が、アプリケーションが資格情報を要求することを妨げているかのようです(これは私の推測です)。これは、デバッガーを使用してサイトを実行する場合には当てはまりません。
この障壁を乗り越えたら、実際にさらにテストを行って、このコードが PKI カードによる認証をサポートするかどうかを確認する必要があります。CredUIがプロンプトをウィンドウに渡して処理するので、そうなると思います。
質問は次のとおりです。1) Debug (localhost) で実行されている IIS サーバー VS を介してメソッドが呼び出されたときに、Windows セキュリティ ウィンドウのポップアップを妨げている可能性があるのは何ですか?
2) CredUIPromptForWindowsCredentials を実装して PKI を操作した経験のある人はいますか?
2a) もしそうなら、CredUIPromptForWindowsCredentials は実際に追加コードなしで PKI をサポートしますか (Windows ワークステーションがすべてのハードウェア、ドライバー、およびミドルウェアで構成されていると仮定して)?
あなたが貸すことができる洞察を前もって感謝します。
フィル S.