2012-02-20 11 views
0

私の問題は、ログに別々のプロジェクトを使用するasp.netソリューションがあり、ログにログインしたユーザーを保存するようにしたいということです。 Windows認証はwebappで使用され、アプリケーションプールはサービスアカウントで実行されます。だから私はメソッド(静的)を介してロガーを呼び出すときに私はロガーが誰がログインしているユーザーを拾うようにしたい。私が現在取得している唯一のものは、アプリケーションプールが実行されているサービスアカウントです。.NETログインしているユーザー

webappからユーザーを取得する方法のアイデアはありますか?

+0

が重複する可能性を[取得ログインしたユーザー](http://stackoverflow.com/questions/8930352/retrieve-logged-in-user) – JohnFx

答えて

2

あなたのスレッドのプリンシパルが、あなたのようなものが必要な場合があり、あなたのglobal.asaxでApplication_AuthenticateRequest方法の終わりにSystem.Web.HttpContext.Current.User

と同じであることを確認してください:の

System.Threading.Thread.CurrentPrincipal = System.Web.HttpContext.Current.User; 
+0

を取得するために使用されますが、これはどのように動作しているのか分かりません。答えとしてマークする前にもう少し試してみてください。 – Boppster

+0

@Boppster:通常、アプリケーションプールのIDセットは、低い権限を持つべきであるそのアプリケーションプール(ローカルマシンまたはドメインアカウントではない)用に作成された仮想アカウントである必要があります。 Application_AuthenticateRequest(必要に応じてカスタムプリンシパルを作成できる)の最後に、スレッドのプリンシパルをログインしているドメインユーザーに "昇格"できます。 –

0

はい。ロガーからではなく、明らかに。何らかの形でHttpRequestにアクセスする必要があります。

これは、アプリケーションに組み込まれたロギングフレームワークで実行できるため、別のレベルではそれほど実行できません。

ユーザーはリクエストレベルのプロパティで記録されます。

2

HttpContext.Current.User.Identity.Nameを使用することができます。私はHttpContext.Currentが別のプロジェクトでも正しく初期化されるべきだと思います。

+0

はい、DLLがWebアプリケーションと同じプロセスで実行されている限り、 'HttpContext.Current'利用できるはずです。 –

+0

これは、私には、アプリケーションプールが実行されているサービスアカウントのIDのみを提供します。 – Boppster

+0

Hmmm ...これは常に現在のログオンしているユーザーだと思っていました。あなたは 'Membership.GetUser()'を試すことができます(詳細はhttp://msdn.microsoft.com/en-us/library/fcxcb339.aspxを参照)。 )。私はあまり確かではない。それがうまくいけば私は私の答えを更新します:)。 – Chris

関連する問題