【问题标题】:Roles authentication works using Authorization attribute but not via authorization in web.config角色身份验证使用 Authorization 属性而不是通过 web.config 中的授权工作
【发布时间】:2011-03-29 23:07:07
【问题描述】:

我正在使用 ASP.NET MVC 3 并且正在尝试做一些应该非常直接的事情......

我的应用程序使用表单身份验证,这对于控制器/操作非常有效。例如,如果我使用以下属性装饰控制器或操作,则只有管理员组的成员可以查看它们:

[Authorize(Roles="Administrators")]

但是,我在默认 Scripts 文件夹下有一个名为 Admin 的文件夹。我只希望管理员组的成员能够访问此目录中的脚本,因此我在目录中创建了一个新的 web.config,其中包含以下内容:

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

但是,无论用户是否是管理员组的成员,他们都会收到 302 Found 消息,然后被重定向到登录页面。

如果我将 web.config 更改为 allow user="*",那么它可以工作。如果我为我正在测试的特定用户添加allow users="Username",它也可以工作。

关于我哪里出错或我可以从哪里开始调查的任何想法?

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-membership


    【解决方案1】:

    您是否已将 RoleManager 添加到默认 Scripts 文件夹中的 web.config 中 如下所示

    system.web>
        <authentication mode="Forms" >
          <forms loginUrl="login.aspx"
          name=".ASPXFORMSAUTH" />
        </authentication>
    
      <roleManager defaultProvider="SqlProvider" 
        enabled="true"
        cacheRolesInCookie="true"
        cookieName=".ASPROLES"
        cookieTimeout="30"
        cookiePath="/"
        cookieRequireSSL="false"
        cookieSlidingExpiration="true"
        cookieProtection="All" >
        <providers>
          <add
            name="SqlProvider"
            type="System.Web.Security.SqlRoleProvider"
            connectionStringName="SqlServices"
            applicationName="SampleApplication" />
          </providers>
        </roleManager>
      </system.web>
    

    【讨论】:

    • 你很准确,谢谢!!我知道这会很简单:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2010-11-25
    • 1970-01-01
    • 2019-10-04
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多