1

これが可能か、または可能な回避策を知りたいです。サイトを IIS で実行したい - サイトを実行するアプリ プールは、AD を検索できるサービス アカウントになります。

現在のアプリケーション プール アカウントを取得し、プリンシパル コンテキストを設定するには、以下を使用します。

string appPoolAccount = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
// Define Context
PrincipalContext context = new PrincipalContext(ContextType.Domain);

これで、ユーザーは自分のマシンからサイトを実行します。ブラウザーを起動すると、プロセスを起動するユーザー名は、例として「test123」になります。これは、ログインしているユーザーと同じです。

私が取得する必要があるのは、彼らがブラウザを実行しているユーザー ID です。そのため、以下のようなことができます (2 番目のパラメーターは、私が見つけたプロセスを実行しているユーザーの文字列になります)。

UserPrincipal user = UserPrincipal.FindByIdentity(context , 'test123');

これまでのところ、次からそのユーザー文字列を取得しようとしました:

string test = Environment.UserName; //Took the App Pool Account
WindowsIdentity wi = WindowsIdentity.GetCurrent(); // Took App Pool account
string test = HttpContext.Current.User.Identity.Name; //bombed out as null
4

1 に答える 1

2

このコードは機能するはずですが、Web.Config で Windows 認証を有効にし、匿名認証を無効にしています。

if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
   string username = System.Web.HttpContext.Current.User.Identity.Name;
}
于 2013-10-10T10:44:46.983 に答える