0

リモート管理者(ローカルまたはドメインの資格情報を持つ)がWCFTCPバインディングを介してWindowsサービスを制御できるようにしたい。これを行うには、リモートユーザーを管理者として認証する必要があります。プリンシパルユーザー/ロールを確認できますが、リモートユーザーに正しいユーザーの詳細/トークンを要求する方法がわかりません。

これは、 WCFTCPエンドポイントを管理者に制限することに関する私の以前の質問に関連しています。[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]制限付きサービスメソッドに追加してをキャッチする代わりに、次の方法でSecurityExceptionチェックできるようです。

if (!System.Threading.Thread.CurrentPrincipal.IsInRole("Administrators"))
    return MethodResult.AccessDenied;
// haven't tested if it's the service thread or the remote user yet.

別のプリンシパルとして接続を再開できるように、アクセス拒否の結果が返された場合、リモートユーザーにWindows認証を求めるにはどうすればよいですか?

もちろん、変更はリモートユーザーのクライアントアプリケーションに影響を与える必要があります。おそらく、それを行うためのよりクリーンなWCFの方法がありますか?


編集: 「。netのなりすまし」を検索すると、CodeProjectでこれにたどり着きました。見る機会がありませんでしたが、これが進むべき道かもしれません。

4

3 に答える 3

1

WCF呼び出しでユーザーの資格情報を渡す必要があります。通常、クライアントアプリケーションは、現在実行中のユーザーの資格情報を「キャプチャ」するだけです。または、ユーザー名とパスワードを明示的に指定することもできます。したがって、必要に応じて、ユーザーに別の資格情報のセットを要求することができます。

いずれにせよ、クライアントアプリはユーザーにプロンプ​​トを表示する必要があります。WCF呼び出しは、承認が失敗したときにエラー(コードまたは例外)を返す必要があり、クライアントはその戻り値をキャプチャしてユーザーにプロンプ​​トを表示し、新しい資格情報で再試行する必要があります。WCF自体は、ユーザーへのプロンプトを処理できません。

クレデンシャルを渡すさまざまな方法に関する記事は次のとおりです。http:
//blogs.msdn.com/b/sonuarora/archive/2007/04/21/setting-client-credentials.aspx

于 2010-12-10T12:56:46.787 に答える
0

これがIISでホストされていると仮定すると、IISマネージャーで匿名認証をオフにする必要があります。これにより、ユーザーはWindowsアカウントを使用してマシンにログインする必要があります。ASP.NETの偽装を有効にする必要がある場合もあります。

于 2010-12-10T12:29:01.083 に答える
0

これは、pInvokeを使用して標準のWindowsダイアログを使用してユーザーにプロンプ​​トを表示する方法です。C#.Net3.5SP1で認証ダイアログを表示する方法

于 2010-12-10T14:39:51.753 に答える