我使用的形式的认证,在我的asp.net (3.5)应用程序。我也使用角色定义有什么用户可以访问其子目录的程序。因此,有关的部分我的网页。配置文件是这样的:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Default.aspx" path="/" protection="All" timeout="360" name="MyAppName" cookieless="UseCookies"  />      
  </authentication>
  <authorization >
    <allow users="*"/>
  </authorization>
</system.web>

<location path="Admin">
  <system.web>
    <authorization>
      <allow roles="Admin"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

根据我已经阅读,这应该确保只有用户能够访问的管理目录将用户已经过身份验证和分配管理的作用。

用户认证,节省的认证券和其他相关问题的所有工作的罚款。如果我删除的标签。配置文件,一切工作正常。问题是当我试图强制执行,只用户有管理员的作用应该能够接管理的目录。

在此基础上 MS KB的文章 与其他网页给予相同的信息,我已经加入以下代码到我的全球性的。asax文件:

protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
    if (HttpContext.Current.User != null) {
        if (Request.IsAuthenticated == true) {    
            // Debug#1            
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
            // In this case, ticket.UserData = "Admin"                
            string[] roles = new string[1] { ticket.UserData }; 
            FormsIdentity id = new FormsIdentity(ticket);
            Context.User = new System.Security.Principal.GenericPrincipal(id, roles);
            // Debug#2
        }
    }
}

然而,当我试着记录中,我无法访问该管理文件夹(获得重新定向,以登录页)。

在调试的问题,如果我步骤通过一请求,如果我执行的上下文。用户。IsInRole("管理员")的标记线调试#1所述,返回一个错误的。如果我执行该同一声明在线调试#2,这等于真实的。所以至少就全球性的。asax感到关切的是,作用是在分配适当的。

之后,全球性的。asax,执行跳跃权登录网页(由于缺少的作用导致该网页载在管理文件夹的以拒绝)。然而,当我执行相同的声明,在第一线的Page_Load的登录,回报是假的。这样的地方之后Application_AuthenticateRequest在全球性的。asax和初载的网页表单在限制目录,作用的信息正在消失,引起的认证失败的(注:在Page_Load,适当认证票仍然是分配给上下文。用户。Id-只有作用正在丢失)。

我做错了,我怎么能让它正常工作?


更新:我进入了 下面的解决方案

有帮助吗?

解决方案

这里的问题和解决方案:

前面的发展,我已经到该网站菜单点击Asp.net 配置。这导致了在以下行被添加到网站上。配置:

<system.web>
  <roleManager enabled="true" />
</system.web>

从这一点上,应用程序是假设我在做的角色通过Asp.net 网站的经理,而不是通过FormsAuthentication角色。这样的一再失败,尽管事实上,实际验证和角色的逻辑是设立正确。

以后这条线是从网络。config一切都完美工作。

其他提示

这只是个随机的射击,但是你得到的阻止,因为该秩序的授权管理员?也许你应该试试换你的拒绝所有的和你所有的管理。

只是在情况越来越复盖的拒绝。

(我的代码样本在这里但他们并没有显示出来。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top