Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于验证用户身份的自定义方法正在忽略允许访问该页的6个用户中的一个_C#_.net - Fatal编程技术网

C# 用于验证用户身份的自定义方法正在忽略允许访问该页的6个用户中的一个

C# 用于验证用户身份的自定义方法正在忽略允许访问该页的6个用户中的一个,c#,.net,C#,.net,我为一个简单的C#.net(VS 2008 web应用程序项目)编写了一个自定义授权方法。当当前用户未经授权时,该方法将其重定向到友好的AccessDenied页面。(使用Windows身份验证)。有6个用户将被允许查看此页面。问题是,6个用户中的1个,即user2,每次都被重定向到AccessDenied页面,而实际上他们是经过授权的。我已经排除了拼写和标点错误的可能性——这不是问题所在 这是一个简单的2页应用程序,主默认页面和重定向到AccessDenied页面。如果我注释掉Authenti

我为一个简单的C#.net(VS 2008 web应用程序项目)编写了一个自定义授权方法。当当前用户未经授权时,该方法将其重定向到友好的AccessDenied页面。(使用Windows身份验证)。有6个用户将被允许查看此页面。问题是,6个用户中的1个,即user2,每次都被重定向到AccessDenied页面,而实际上他们是经过授权的。我已经排除了拼写和标点错误的可能性——这不是问题所在

这是一个简单的2页应用程序,主默认页面和重定向到AccessDenied页面。如果我注释掉AuthenticateCurrentUser()方法,则该应用程序适用于该用户。它对所有其他用户都有效。为什么只有一个用户会受到影响?我让该用户登录到另一台计算机并尝试-结果相同。然后,我将带有注释掉的AuthenticateCurrentUser()方法的代码移动到服务器上的文件夹中,这对他们起到了作用

我应该用另一种方式进行身份验证吗?我看过一些例子,但对于这个简单的应用程序来说,它们似乎有些过头了。有一个no global.asax文件,但也许我应该使用一个并在那里进行身份验证

web.config:

<authentication mode="Windows"/>
    <authorization>
      <allow users="domain\user1, domain\user2, domain\user3, domain\user4, domain\user5, domain\user6" />
      <deny users ="*"/> 
    </authorization>
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {              
                //Code to load GridViews
            }            

            AuthenticateCurrentUser();
        }
protected void AuthenticateCurrentUser()
        {
            System.Security.Principal.WindowsIdentity Ident = System.Security.Principal.WindowsIdentity.GetCurrent();

string strUser = Ident.Name.Substring(4);

if ( !(strUser == "user2" || strUser == "user4" || strUser == "user1" || strUser == "user3" || strUser == "user5" || strUser == "user6") )

{
                Response.Redirect("AccessDenied.aspx");     
            }
            else
            {
                Label1.Text = "Access Granted";
            }
        }
更新:根据评论,我替换了这两行代码:

    System.Security.Principal.WindowsIdentity Ident =                
System.Security.Principal.WindowsIdentity.GetCurrent();

    string strUser = Ident.Name.Substring(4);
使用这一行代码:

string strUser =  Environment.UserName;
我要到2015年4月27日星期一才能在user2上测试它。我会回来报到的


后续行动4/27/15:代码更改没有影响。user2仍然无法访问服务器上部署的应用程序。我甚至让user2登录到我的本地开发机器(安装了VS2008)并以user2的身份运行调试器。在这种情况下,应用程序正确地允许user2访问web应用程序的主页。我还从我的本地用户2访问(远程)服务器文件,她不允许访问应用程序的主页。然后我让user2从另一台机器登录,她仍然无法访问。服务器具有与本地计算机完全相同的代码文件。这只会发生在这个用户身上——其他用户可以很好地访问,所以我很困惑,为什么在其他用户没有问题的情况下,这个用户会发生这种情况。如果这是一个服务器配置和/或权限问题,这应该会发生,不是吗?

我认为
正在覆盖
设置。如果我是正确的,那么正确的设置是
,因此用户可以更改为提供证书为什么不根据他们的IP地址进行身份验证?没那么复杂,你能给我举个例子吗。我不确定什么时候Windows身份验证应该足够好。@doreen,看看这里,你可以获取你的用户IP,并用你在web.config中列出的可信IP检查它们(最好不要硬编码,在配置文件中动态)。尽管你认为Windows身份验证更好,使用这种方法,因为您自己更了解应用程序的用途。只想发布一条关于其他注释的警告:基于IP地址验证用户是有限的、易受攻击的,而且通常是错误的。IP地址很容易被欺骗,可以在网络中一路更改(如果存在任何类型的NAT或代理)。IP地址仅指定返回数据包的路由位置,而不是发送者的身份。