使用Aspnet角色进行身份验证:应该允许访问时拒绝访问

时间:2013-01-04 14:14:24

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

我目前正在研究用于管理某些数据的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>

此代码允许处于'dev'角色的用户(在我的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>

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

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

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

请查看以下链接,了解如何保护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>