0

クライアントがログオンしていない共有上のリソースにアクセスする必要があるシック クライアントがあります。クライアントが Windows ドメイン上にあるか、ドメインのない混合環境である可能性があるため、ユーザーはローカルでサーバーにログオンする必要があります。これまでの回避策の 1 つは、ユーザーのデスクトップに共有へのショートカットを作成することでした。これにより Windows エクスプローラーが開き、共有へのアクセスを許可または拒否するパスワード プロンプトが開きます。Windows エクスプローラーに依存せずにユーザーを共有にサインオンさせるにはどうすればよいですか? 共有へのアクセスを要求するためにアプリに実行させることができる、Windows エクスプローラーは何をしますか?

c# web app でネットワーク共有から Access ファイルを読みましたが、WinForms アプリでこれを行っており、インタラクティブにしたいと考えています。How to prompt for a Passwordも読みましたが、そのコードは、共有へのアクセスを要求して許可する UI を呼び出すのではなく、ユーザーからの文字列を要求するだけです。OSがネットワークリソースへのアクセスを要求するようにトリガーするほど、アプリにユーザーのパスワードを知らせたくないのです。

4

1 に答える 1

2

Win32 API CredUIPromptForCredentials (または、Vista/Win2k8 で実行している場合は CredUIPromptForWindowsCredential を参照してください。winver をチェックして、どの呼び出しを行うかを決定する必要があります)。

このメソッドは、実際には通常の資格情報プロンプトを呼び出しますが、資格情報を取得します (ひどい、私は知っています)。

PInvoke.Net には、C# からこの関数を呼び出す方法を示すサンプル コードがあります (PInvoke サンプルでは、​​save で false を指定した場合、フラグに CREDUI_FLAGS.DO_NOT_PERSIST を渡す必要があります。奇妙なことです)。

セキュリティに関する優れたKeith Brown wikibookの詳細情報 (および管理されていないサンプル)

資格情報を (安全な文字列で) 取得したら、ユーザーになりすましてリソースにアクセスできます (logonuser を使用)。

そして、それは醜いです。Windows に標準のプロンプト ダイアログを表示させたいのですが、資格情報について知りたくないということは理解しています。

System.Diagnostics.Process を使用して、リモート UNC で非表示の explorer.exe を起動するような醜いハックではうまくいかないのではないかと考えています。ユーザーが資格情報を入力するのを待ってから、生成されたエクスプローラープロセスを強制終了する方法を見つける必要があります。

于 2009-06-02T17:17:39.080 に答える