32

サードパーティのコンポーネントを利用するコードを書いていますが、使用を開始するときに ICredentials を実装するオブジェクトを提供する必要があります。

以下のように書くと・・・

var credential = new NetworkCredential("MyUsername", "MyPassword");

...そして「資格情報」を渡します。問題ありません。しかし、現在のユーザーの資格情報を渡したいです(これは Windows サービスなので、指定されたユーザーとして実行されます)

次の両方を試しましたが、どちらも機能していないようです(または何も返されません)

NetworkCredential credential = System.Net.CredentialCache.DefaultCredentials;
NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;

サービスが実行されているユーザー名の資格情報を表す適切なオブジェクトを取得する方法を誰かが提案できますか?

ありがとう

4

6 に答える 6

2

WindowsIdentity.GetCurrent() を試しましたか?

この例を見ることもできます... http://www.codeproject.com/KB/vb/Windows_Service.aspx

于 2010-04-10T00:49:58.783 に答える
0

アプリケーションの開始時にappdomainのprincipalpolicyを設定してみましたか?

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

スレッドを介して現在のプリンシパルオブジェクトにアクセスする前にこの値を設定すると、このオブジェクトでWindowsIDが使用されていることを確認できます。

編集-これはDefaultNetworkCredentialsで機能すると確信しています。これを使用して、WindowsフォームアプリからWindows認証を使用してWebサービスにアクセスしました。

于 2012-06-22T07:38:04.693 に答える
0

理想的なセキュリティ状況は、ログインしているユーザーのパスワードがメモリのどこにも保存されていないことです。ディスク上のどこにも保存されません。人間が入力した文字列と比較するためのハッシュ値としてのみ存在します。パスワードを平文で保存することは本質的にセキュリティ リスクであり、可能な限り避ける必要があります。

この原則を考えると、ユーザーのパスワードを平文で持っているオペレーティング システムの部分はありません。

于 2012-04-03T03:31:13.993 に答える
0

たとえば、偽装を行う必要があります。

    System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = 
    ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

//Insert your code that runs under the security context of the authenticating user here.

impersonationContext.Undo();

http://support.microsoft.com/kb/306158

または、web.config を使用できます。

<identity impersonate="true" />
于 2010-03-12T00:36:41.873 に答える
0

残念ながら、次のように WMI と相互運用する必要があります。

http://www.codeproject.com/Articles/28161/Using-WMI-to-manipulate-services-Install-Uninstall

照会しようとしている値は StartName であり、これは "NT Authority\NetworkService" (または使用しているもの) のようなものに評価されます。この記事の第 2 部と第 1 部をマッシュアップすると、非常に簡単に取得できるはずです。

于 2012-06-08T22:15:05.847 に答える
-2

現在のユーザーが動詞を追加するときにプロセスを実行したいだけの場合: "runas " & Environment.UserName

管理者が書いたようにプロセスを実行したい場合"runas"

vb.netで

Dim ps As New System.Diagnostics.ProcessStartInfo("filepath", "arguments")

ps.Verb = "runas" 'run as admin

'ps.Verb = "runas " & Environment.UserName'run as current user, by default

Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(ps)

現在のユーザー パスワードを取得したい場合は、取得できません。実際、これは安全でない方法です。あなたのサービスが私の Windows パスワード シークレットを取得する必要があるのは、どのような権利と目的ですか? たとえば、携帯電話のピンコードをwhatsappに渡すようなものです

于 2012-04-21T20:15:21.253 に答える