ログインユーザーを取得する
-
05-07-2019 - |
質問
私の会社には大規模なアプリケーションがあります。 WCFを認証用のActive Directoryのバックボーンとして利用します。認証モデルはWindowsであり、サイトにサインインするにはドメインの一部である必要があるため、これは2つのサイトのいずれかで完全に機能します。私が持っている質問は、外部からアクセスできる他のサイトに関連しています。完全なセキュリティモデルが機能するように、ADユーザーの偽装用の特定のユーザー/パスを使用して、プロキシ呼び出しのClientCredentials.Windows.ClientCredentialを設定します。これもすべて期待どおりに機能します。
質問は、Web上でHttpContext.Current.User.Identity.Nameを使用して現在ログインしているユーザーをフォーム認証部分から取得できることですが、これを行うにはSystem.Webを確認する必要があります参照は、現在作業中のDLLに対して存在します。基本オブジェクトは、System.Webを知らない単純なクラスから取得されます。そのベースオブジェクトプロジェクト内でログインしているFormsユーザーを見つける方法はありますか? System.Security.Principalを試しましたが、それはWindowsアカウントへのアクセスを私に伝えることができただけで、何の役にも立ちません。
System.Webを参照するだけでよいことはわかっていますが、それは私にとって非常に扱いにくいものであり、最良のオプションではありません。ここでいくつかのヒントを期待しています。
解決
Thread.CurrentPrincipal.Identity
は、 HttpContext.CurrentContext ...
現在実行中のスレッドに関連付けられたIDを返します。これは、ほとんどの場合、ログオンしているユーザー*です。
注:*委任/偽装を使用している場合、またはサービスアカウントとして実行している場合、スレッドが存在するIDのアカウントが返されますが、あなたの場合、コンテキストを実行しているようには聞こえませんアイデンティティの切り替え。
他のヒント
文字列としてのユーザー名で十分な場合
Environment.UserName
// Environment.UserDomainName and MachineName can also be useful
From MSDN :
現在のスレッドを開始した人のユーザー名を取得します。