如何确定用户是从Internet还是Intranet访问我的应用程序?
我对IIS服务器变量的来源和安全性感到非常困惑。例如,http://msdn.microsoft.com/zh-cn/library/ms524602.aspx,对于远程用户,Request.ServerVariables [“ AUTH_USER”]是否为空白?
另外,http://msdn.microsoft.com/zh-cn/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 ...]
首先,您不能使用Environment
该类来获取有关向服务器发出请求的用户的信息。Environment
访问本地计算机的环境,因此您将始终获得服务器的详细信息。没有什么可以告诉您有关客户的事情。
服务器可用的所有客户端信息都将在Request
对象中。如果您在网站上使用身份验证,则可以使用户登录,然后例如检查用户的安全详细信息System.Web.HttpContext.Current.Request.LogonUserIdentity
。
但是,这仍然不会告诉您客户端实际在哪里。测试用户的登录域只会告诉您用户是否已针对该域进行身份验证,而不是客户端是否在您的本地网络上。如果您的网站可以从网络外部访问(例如,使用NAT或服务器上的公共+私有地址混合访问),则您仍然必须检查请求中的IP地址,以确保其位于本地网络中。
因此,简短的答案是,如果不根据已知的内部网络范围检查IP地址,就无法执行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句