1

ユーザーがインターネットまたはイントラネットからアプリケーションにアクセスしているかどうかを確認するにはどうすればよいですか?

IIS サーバー変数のソースとセキュリティについて非常に混乱しています。 http://msdn.microsoft.com/en-us/library/ms524602.aspx たとえば、Request.ServerVariables["AUTH_USER"] はリモート ユーザーに対して空白ですか?

また、http://msdn.microsoft.com/en-us/library/system.environment.userdomainname.aspxの Environment.UserDomainName に関するドキュメントで は、コンピュータ名にドメインと同じ名前を付けることで、これを操作できると思います。私がチェックしている名前

理想的には、私はただしたいです...

if ( [ ... user is not remote ... ] && Enironment.UserDomainName == "TargetLocalDomainName" )
    var username = Environment.UserName;
    PrepareLocalUserSession(username);
    RedirectToHomePage();
 } 
 //else
 [... redirect to remote login page ...]

私の質問は、ユーザーがリモートの宛先から来ているかどうかをどのように判断するのですか? 可能であれば、IP チェックよりも簡単なものを使用することを強くお勧めします。

ありがとう


編集

上記の私のアプローチは非常に恐ろしいと思ったので、正気のアプローチを投稿したいと思いました

var hostAddress = System.Web.HttpContext.Current.Request.UserHostAddress;

bool localUser = hostAddress.StartsWith("192.") | hostAddress.StartsWith("10.") | hostAddress.StartsWith("172.") || HttpRequest.Current.Request.IsLocal;

string username = Request.ServerVariables["LOGON_USER"].split( new char[]{"/"})[0]; 
string domain   = Request.ServerVariables["LOGON_USER"].split( new char[]{"/"})[1];

if( localUser && domain == "TargetLocalDomainName" ){
   PrepareLocalUserSession(username);
   RedirectToHomePage();
} 

//else
[... redirect to remote login page ...]
4

1 に答える 1

2

まず、Environmentクラスを使用して、サーバーにリクエストを行っているユーザーに関する情報を取得することはできません。 Environmentローカル コンピューターの環境にアクセスするため、常にサーバーの詳細を取得できます。そこには、クライアントについて何かを教えてくれるものは何もありません。

サーバーが利用できるすべてのクライアント情報がRequestオブジェクトに含まれます。Web サイトで認証を使用する場合、ユーザーをログインさせてから、System.Web.HttpContext.Current.Request.LogonUserIdentityたとえばユーザーのセキュリティの詳細を確認できます。

ただし、これでもクライアントが実際にどこにいるかはわかりません。ユーザーのログイン ドメインをテストすると、クライアントがローカル ネットワーク上にあるかどうかではなく、ユーザーがドメインに対して認証されているかどうかのみがわかります。Web サイトがネットワークの外部からアクセスできる場合 (たとえば、NAT を使用したり、サーバー上でパブリック アドレスとプライベート アドレスが混在している場合) は、要求の IP アドレスをチェックして、それがローカル ネットワークにあることを確認する必要があります。

簡単に言えば、既知の内部ネットワーク範囲に対して IP アドレスをチェックしないと、これを行うことはできないということです。

于 2013-08-26T02:55:46.387 に答える