asp.net核心3.1未经授权的401重定向到无法正常工作的未经授权的剃刀页面

时间:2020-07-09 11:51:30

标签: asp.net asp.net-core asp.net-core-3.1

.net core我是新手,但在asp.net中已经发展了几年。我的核心站点是基于Windows AD的身份验证。我正在使用广告组来控制访问,我的剃须刀索引页面已设置为广告组

[Authorize(Policy = "ADRoleOnly")]

当不是该组成员的用户尝试访问剃刀索引页面时,将得到403拒绝。我试图弄清楚如何将它们重定向到我设置为“ / unAuthAccess”的剃刀页面。此“ / unAuthAccess”剃刀页设置为

[AllowAnonymous]

,并且我验证了AD组中的用户可以很好地查看“ / unAuthAccess”页面,以及不属于AD组且获得403的用户,因此allowanonymous正在/ unAuthAccess页中工作。

因此,当任何用户点击我在该策略中设置的任何页面(如果他们无权查看该页面时),我都不知道在哪里或如何放置重定向。

[Authorize(Policy = "ADRoleOnly")]

我已经在Startup.cs中尝试了以下两种状态(401和403)

app.UseStatusCodePages(async context =>
{
    if (context.HttpContext.Response.StatusCode == 401)
    {
         app.Use(async (context, next) =>
         {
               context.Request.Path = "/UnAuthAccess";
               await next();
         });
    }
 });

这不起作用。所以我尝试了

 app.UseStatusCodePagesWithRedirects("/Errors/{0}");

将剃须刀页面设置为“ / Errors / 401”以及“ / Errors / 403”,我不记得应该将其设置为哪一个并捕获用户的unAuth访问。

无论哪种方式,用户都不会重定向到我的razorpage,而我只是收到标准的浏览器HTTP错误403拒绝消息。

只是寻求有关重定向如何在核心中工作的帮助???我应该直接从剃须刀页面cs /后端代码中以某种方式直接进行重定向吗?

我使用Global.asax在旧的asp.net 4.x中使用此方法,但是该方法在core:(

if (Response.StatusCode == 401 && Request.IsAuthenticated)
            {
                Response.Redirect("~/unauthAccess.aspx");
            }

1 个答案:

答案 0 :(得分:1)

我想通了,我不得不移动线

app.UseStatusCodePagesWithRedirects("Errors/{0}");

到Startup.cs中的静态文件和路由调用之前

 if (env.IsDevelopment())
            {
                //sets ad domain and mail server for specific test environments
                misc.ad_domain = "corp.emc.com";
                misc.smtp_server = "mailhub.lss.emc.com";

                app.UseStatusCodePagesWithRedirects("/Errors/{0}");

                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseStatusCodePagesWithRedirects("/Errors/{0}");

                app.UseDeveloperExceptionPage();
                //app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseStaticFiles();
            app.UseRouting();
            app.UseHttpsRedirection();       
            app.UseAuthentication();
            app.UseAuthorization();

是的,我知道我只是将其放在enI.Development中进行调试测试。我希望这可以帮助其他人从以前的.net进入asp.net核心,我知道这对我来说是一个学习过程,可以将东西放置在Startup.cs中

使用此设置,我不得不将剃刀页面的路径从“ / unAuthAccess”更改为“ Errors / 401”,以显示我的unauth页面:)