【问题标题】:Redirect for some pages and deny access for others?重定向某些页面并拒绝其他页面的访问?
【发布时间】:2016-01-07 10:43:30
【问题描述】:

我正在使用表单身份验证。

在根 web.config 中有 ...

<authentication mode="Forms">
  <forms loginUrl="~/Auth/Login.aspx" timeout="2880" defaultUrl="~/Search.aspx" />
</authentication>

...因此,如果未经身份验证的用户被拒绝访问,则通过子文件夹的 web.config 中类似以下的条目...

<system.web>
  <authorization>
    <deny users="?"/>
  </authorization>
</system.web>

...然后未登录的用户被重定向到 Login.aspx 页面。


第一个问题

如果未经身份验证的用户请求某些(但不是全部)页面,或从一个子文件夹(但不是另一个)请求文件,我想通过返回 HTTP 403 而不是将它们(HTTP 302)重定向到登录来拒绝访问页面。

我该怎么做?目前未经身份验证的用户总是被重定向到登录页面,而不是被简单地拒绝访问。


第二个问题

我还使用“基于角色”的权限,例如我有一个名为 Supervisors 的角色。

对某些文件夹的访问仅供主管使用,因此这些文件夹具有类似的网络配置

<system.web>
  <authorization>
    <allow roles="Supervisor"/>
    <deny users="*"/>
  </authorization>
</system.web>

如果没有主管角色的经过身份验证(登录)的用户尝试访问,他们也会被重定向到登录页面(尽管他们已经登录)。

我能否以某种方式更改它(例如返回 HTTP 403,或重定向到其他失败页面)?

【问题讨论】:

    标签: asp.net web-config asp.net-4.0


    【解决方案1】:

    您必须通过创建将在 Page_Init 上运行的过程手动执行此操作

    Public Shared Sub CheckAccess()
    If My.User.IsAuthenticated And (Condition Here) Then
    Response.Redirect("AccessDenied.aspx")
    End If
    End Sub
    
    Protected Sub Page_Init (sender As Object, e As EventArgs) Handles Me.PageInit
    CheckAccess()
    End Sub
    

    【讨论】:

    • 我想要拒绝访问的一些文件(通过返回 HTTP 403)是图像文件、PNG 文件,它们没有 Page_Init。
    • 你应该将不同文件夹中的文件分开,并在web.config中设置它们的访问控制
    • 我这样做了(如 OP 中所述),但禁止目录中的文件重定向(HTTP 302)到登录页面,我问的是其中一些是否可以通过拒绝访问(HTTP 403)而是。
    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2013-01-30
    • 2016-11-24
    相关资源
    最近更新 更多