Asp.Net Identity未授权重定向不使用自定义路由

时间:2014-03-11 21:16:04

标签: asp.net webforms asp.net-membership url-routing asp.net-identity

表单身份验证用于在将文件夹配置为限制用户身份验证时重定向到登录页面。在web.config中配置,在文件夹中。

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

哪会将您重定向到登录页面,并返回首先要返回的位置。授权有效(Identity 2.0 Beta1预发行版),但没有重定向到登录页面,虽然我在Identity上经历了很多,但我无法做到这一点。现在,在实现了其他一切安静的身份之后,当我尝试访问一个要求我登录的页面时,我看到了YSOD的说法。

  

访问提供此请求所需的资源时发生错误。您可能没有权限查看请求的资源。

我已经使用了vs2013的默认模板,一旦我放入自定义路线它就停​​止了工作,我已经尝试了很多东西,我只是无法让它工作。 。

我发现当我启用FriendlyUrls或资源的完整路径并使用url路由到限制为Logged in users的资源时,它会工作。

例如我有一个位于/Account/nightlife/stream.aspx的页面,其文件夹中包含该web.config

因此,当我使用完整路径时,它可以并将我带到登录页面

http://mylocaliis/login?ReturnUrl=%2FAccount%2Fnightlife%2Fstream.aspx (without the .aspx in the case of friendly urls)

几周前,当我使用表单身份验证时,您可以在登录页面看到的自定义路由中存在此问题

  

(即 - routes.MapPageRoute(routeName:&#34; login&#34;,routeUrl:&#34; login&#34;,physicalFile:&#34;〜/ Account / Login.aspx&#34;) ;)

但是使用Identity和自定义路由启用了重定向剂量,我看到了YSOD

例如如果我尝试使用自定义路由网址访问资源(当我没有登录时)

localhost/stream (defined by the custom route -  routes.MapPageRoute( "nightlife_stream", "stream", "~/Account/nightlife/stream.aspx" ); )

我看到了YSOD。

1 个答案:

答案 0 :(得分:0)

我知道这则帖子很旧,但是今天我也碰到了这个错误并进行了修复。基本上,如果您创建了一条路由并且用户尚未登录但需要登录,则即使MapPageRoute为“ checkPhysicalUrlAccess”参数指定为true,也会得到YSOD(黄色死亡屏幕)。

要解决此问题,我在Global.asax的Application_AuthenticationRequest方法中添加了一个检查。所以,我的代码是这样的...

在Global.asax中的Application_Start内部,我注册了我的路线:

RouteTable.Routes.MapPageRoute("EditAPage", "editpage/{pageToken}", "Admin/editpage.aspx", true);

然后我将其添加到Global.asax:

void Application_AuthenticateRequest(object sender, EventArgs e)
{
    var user = HttpContext.Current.User;
    string url = Request.Url.ToString();

    if (url.Contains("/editpage") && user == null)
    {
        Response.Redirect("~/Account/Login.aspx?ReturnUrl=%2Feditpage");
    }
}

我将需要进一步发展,因为我还有其他页面需要对用户进行身份验证和授权,因此理想的情况是不必为最终添加的每个路由创建单独的检查。 。,但现在,这会将我的用户重定向到登录名。我还需要添加处理,以将{pageToken}附加到ReturnUrl-如果提供的是令牌。