表单身份验证 - 子文件夹Web.Config无法正常工作

时间:2013-04-19 15:03:48

标签: c# asp.net forms-authentication

我需要在我的网站中只有某些用户可以查看的区域。

我所做的是创建一个Video文件夹。在那个foler下我有文件夹 一个叫做Login,另一个叫做WatchVid。在Login文件夹中,我有一个名为Login.aspx的页面。一旦用户登录,他们将转到/WatchVid/Watch.aspx 以下是一个代表:

    Video Folder
      |
      | 
      ----> Login Folder
      |        |
      |        |  
      |        ---> Login.aspx 
      |
      ----> WatchVid Folder
                 |
                 |
                 --->Watch.aspx                  

我的WatchVid中有以下Web配置文件,只允许具有VidUser的角色查看该页面:

    <?xml version="1.0"?>
    <configuration>
    <system.web>
     <authorization>
        <allow roles="VidUser" />
        <deny users="?" />
     </authorization>
    </system.web>
    </configuration>

我发现即使我改变了:

      <allow roles="VidUser" /> 

     To: 

      <allow roles="VidUser1" />

我仍然可以访问Watch.aspx页面 ,即使 我没有VidUser1的角色。

我做错了吗?

正如下面的参考一样,一旦用户使用他们的用户ID登录我使用的代码,pwd:

    protected void btnLogin_Click(object sender, EventArgs e)
    {
        if (Roles.IsUserInRole(txtUserName.Text, "StreamingUser"))
         {
             const string url = "~/Video/WatchVid/Watch.aspx";
             Response.Redirect(url);
         }

Stephan,我在我的根web.config页面中有以下内容,但仍然允许我访问Watch.aspx页面:

        <location path="Video/WatchVid">
        <system.web>
          <authorization>
             <allow roles="StreamingUser1dfdfdfd" />
             <deny users="?" />
         </authorization>
       </system.web>
       </location>

注意我是如何创建一个StreamingUser1dfdfdfd的虚拟角色来检查它的。我仍然可以访问Watch.aspx页面。

麦克

我的WatchVid文件夹下面有以下内容但是当我使用*时出现访问错误 - 有什么想法吗? :

     <?xml version="1.0"?>
     <configuration>
     <system.web>
     <authorization>
        <allow roles="StreamingUser" />
        <deny users="*" />
      </authorization>
     </system.web>
     </configuration>

我收到以下消息:   未授权:由于服务器配置,登录失败。验证您是否有权根据您提供的凭据和Web服务器上启用的身份验证方法查看此目录或页面。请与Web服务器的管理员联系以获取其他帮助。

请记住,这仍然有效:

     protected void btnLogin_Click(object sender, EventArgs e)
     {
       if (Roles.IsUserInRole(txtUserName.Text, "StreamingUser"))
       {
         const string url = "~/Video/WatchVid/Watch.aspx";
         Response.Redirect(url);
       }

但现在它不会让我通过Watch.aspx页面,因为我收到错误。

2 个答案:

答案 0 :(得分:0)

在最外层(根)web.config文件中使用位置标记。

编辑以显示我们的一个应用程序的(改编的)工作示例:

<authorization>
   <allow users="?" />
</authorization>

<location path="Login.aspx">
  <system.web>
   <authorization>
      <allow users="*" />
   </authorization>
  </system.web>
</location>

<location path="Videos/WatchVid">
  <system.web>
   <authorization>
      <allow roles="VidUser" />
      <deny users="?" />
   </authorization>
  </system.web>
</location>

答案 1 :(得分:0)

你想要改变

<deny users="?"/>

<deny users="*"/>

*表示拒绝所有人。然后你的allow roles会让你担任正确的角色。

?表示拒绝未经身份验证的用户。由于您已通过身份验证,因此不会被拒绝。