18

C# を使用してプログラムでユーザー名を見つける必要があります。具体的には、現在のプロセスに接続されているシステム/ネットワーク ユーザーを取得したいと考えています。Windows 統合セキュリティを使用する Web アプリケーションを作成しています。

4

3 に答える 3

38

アイデンティティの抽象化されたビューは、多くの場合IPrincipal/IIdentityです。

IPrincipal principal = Thread.CurrentPrincipal;
IIdentity identity = principal == null ? null : principal.Identity;
string name = identity == null ? "" : identity.Name;

これにより、同じコードを多くの異なるモデル (winform、asp.net、wcf など) で動作させることができますが、事前に設定されている ID に依存します (アプリケーション定義であるため)。たとえば、winform では、現在のユーザーの Windows ID を使用できます。

Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());

ただし、プリンシパルは完全にオーダーメイドにすることもできます。必ずしも Windows アカウントなどに関連しているわけではありません。別のアプリでは、ログイン画面を使用して、任意のユーザーがログオンできるようにする場合があります。

string userName = "Fred"; // todo
string[] roles = { "User", "Admin" }; // todo
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(userName), roles);
于 2008-12-09T05:26:40.903 に答える
16

アプリケーションのコンテキストに依存します。Environment.UserName (コンソール) または HttpContext.Current.User.Identity.Name (Web) を使用できます。Windows 統合認証を使用する場合、ユーザー名からドメインを削除する必要がある場合があることに注意してください。また、現在の HTTP コンテキストから参照するのではなく、分離コードでページの User プロパティを使用して現在のユーザーを取得できます。

于 2008-12-09T00:28:23.360 に答える
3
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name ;
于 2015-02-10T08:24:03.857 に答える