【问题标题】:Authentication using Aspnet Roles : Access is denied when It should be allowed使用 Aspnet 角色进行身份验证:应允许访问时拒绝访问
【发布时间】:2013-01-04 14:14:23
【问题描述】:

我目前正在开发一个用于管理一些数据的 Aspnet MVC3 Razor 应用程序。对应用程序的访问由使用表单的身份验证控制。

我使用 ELMAH 进行错误捕获,以便再次处理它们。 Elmah 提供了一个 elmah.axd 模块,该模块位于项目的根文件夹中,以便查看错误。

这些数据必须是私有的,所以我在 web.config 文件中写了这条规则:

 <location path="elmah.axd">
<system.web>
  <httpHandlers>
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
  </httpHandlers>
  <authorization>
    <allow roles="Dev"/>
    <deny users="*" />
  </authorization>
</system.web>

此代码允许处于“开发”角色的用户(在我的 aspnet_usersinroles 表中)并拒绝所有其他用户。

但是,如果我使用具有此角色的用户登录,则访问该页面会被拒绝。

如果我允许同一用户使用用户授权(见下文),我可以毫无问题地访问该页面。

<allow users="yohann.pansard@gmail.com"/>

我检查了我的 Aspnet_usersinroles 表几次,一切都很好。

我的 roleManager 看起来不错,因为我在应用程序中使用了这些相同的角色(例如 Role.IsUserInRoles("foo", "reader"))。下面是我的 roleManager 的配置:

<roleManager enabled="true" cacheRolesInCookie="false" defaultProvider="AspNetSqlRoleProvider">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="app_demo" />
  </providers>
</roleManager>

我认为角色不属于用户,但我不确定。有可能吗?

我可能忘记了什么,但我看不出这个元素是什么。

有人可以帮帮我吗?

【问题讨论】:

  • applicationwide system.web 部分的 webconfig 中有什么内容?有没有拒绝用户=“*”?
  • 在 applicationwide system.web 部分我有 谢谢。

标签: asp.net asp.net-mvc asp.net-mvc-3 razor forms-authentication


【解决方案1】:

请查看这些链接以了解如何保护 Elmah + 您的配置应如下所示

    <elmah>
    <security allowRemoteAccess="true" />
  </elmah>
  <location path="elmah.axd" inheritInChildApplications="false">
    <system.web>
      <httpHandlers>
        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      </httpHandlers>
      <authorization>
        <allow roles="Dev" />
        <deny users="*" />
      </authorization>
      <!-- 
        See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
        more information on using ASP.NET authorization securing ELMAH.
      <authorization>
        <allow roles="Dev" />
        <deny users="*" />  
      </authorization>
      -->
    </system.web>

在 appsetting 标签下。您还应该更新正确的值

<appSettings>
    <add key="elmah.mvc.disableHandler" value="false" />
    <add key="elmah.mvc.requiresAuthentication" value="true" />
    <add key="elmah.mvc.allowedRoles" value="Dev" />
  </appSettings>

【讨论】:

  • 感谢您的回复。我试过了,但问题没有解决。我认为这不是 elmah 配置的问题,因为我尝试了一个简单的 html 页面,但问题是一样的。用户没有获得他们的角色是有原因的吗?
猜你喜欢
  • 2019-12-12
  • 2012-11-12
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2018-08-18
相关资源
最近更新 更多