質問: ウェブサーバーが同じネットワーク上にある間に、現在ログインしているリモートコンピュータのユーザーのユーザー名をウェブサイトから取得するにはどうすればよいですか? 私はあなたの多くが私の質問が既に尋ねられ、答えられていると思うことを知っていますが、私が試した多くのオプションについて議論したいだけです。 今私のセットアップはこれです。 Windows XPを実行している約50のクライアントがプロフェッショナルです。 Windows Server 2003を実行している1台のサーバー。サーバーA 1台のサーバーがsquidをプロキシサーバーとLinux OSとして実行しています。それをサーバBと呼ぶ 1つのサーバーがApacheを実行しています(ただし、サーバーを起動しています)。サーバーCと呼んでください。 現在、クライアントはWindowsのアクティブディレクトリを使用してドメインにログインし、ドメインサーバはサーバAです。 ブラウザは、サーバBであるプロキシサーバを使用するように設定されています。 プロキシサーバーが制限を超えるダウンロードを許可しないように設定されています(私の場合は100 Mbです)。クライアントが制限を超える要求を行うと、エラーページが表示されます。 今私はエラーページを置き換え、それはマシンCで実行されている私のウェブサイトにユーザーをリダイレクトします。私はまた、ユーザーがアクセスしようとしているリンクを与えられています。次に、どのユーザーがシステムにログオンしているかを調べる必要があります。だから私はファイルをダウンロードし、それぞれのユーザーにダウンロードの完了を通知することができます。 今私がやったことは、ユーザー名や電子メールなどを求めるだけです。 しかし、私は再び彼の名前を入力の喧騒からユーザーを保存したい。 私は次のオプションを試しました。 1. .NET http://www.codeproject.com/KB/cs/getusername。 aspx (動作しませんでした。 私は何かが恋しくなるかもしれない) 2. wmic (働いた) 3. イカによるLDAP(LDAP、アクティブディレクトリなど) 今私はこれに関する質問があります。 1. これらのすべてのオプションはありますか、何か不足していますか? 2. なぜ.NETオプションが機能しなかったのですか? 3. さまざまなsquid認証方法を使用できますが、ログオン後に少なくとも1回ログインする必要があります。私はこれを望んでいない。ユーザーがログインしたときに認証を使用する方法はありますか?ユーザー名とパスワードを再度要求しないでください。
回答: ASP.Netアプリケーション内でユーザーのドメインログインを取得するには、 `Request.ServerVariables( "logon_user")`を使用する必要があります。 ただし、その他の考慮事項もあります。 1)Webサイトに対してのみWindows認証を有効にする必要があります。 2)あなたのユーザーのブラウザ(IEを前提とする)は、`統合Windows認証を有効にする`を有効にする必要があります。 3)ブラウザーからASP.Netアプリケーションへの要求が間接的(つまり1ホップ以上)である場合、関連するすべてのシステムがKerberos認証用に構成されていることを確認する必要があります(これは非常に困難です)。 。 ASP.Netをセットアップして、エンドユーザーを偽装するを使用すると、元のコードが正しく動作するようになります。ただし、これはスレッドで発生するすべてのこと(データベースアクセス、ファイルアクセスなど)がエンドユーザーとして実行されることを意味します。