asp. net core 3.1 несанкционированный перенаправление 401 на неавторизованную razorpage не работает - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в ядре. net, но разработал asp. net в течение нескольких лет. У меня есть основной сайт с аутентификацией на основе Windows AD. Я использую группы AD для управления доступом, моя страница индекса бритвы настроена для группы 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}");

со страницей razor, установленной на «/ Errors / 401», а также «/ Errors / 403», я не мог вспомнить, какой из них должен быть установлен, и перехватить доступ unAuth от пользователя.

в любом случае пользователь не перенаправляется на мою razorpage, и я просто получаю стандартное сообщение об ошибке HTTP 403.

просто ищу справку о том, как перенаправления работают в ядре ??? я должен как-то перенаправить прямо со страницы бритвы cs / backend-кода, если да, то как ??

У меня это работает в старом asp. net 4.x с использованием Global.asax, но этот метод не работает в основном: (

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

1 Ответ

0 голосов
/ 11 июля 2020

Я понял это, мне пришлось переместить строку

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();

да, я знаю, что просто вставил ее env.IsDevelopment для моего отладочного тестирования. Я надеюсь, что это поможет кому-то еще перейти на ядро ​​asp. net из предыдущего. net Я знаю, что это было кривой для меня, где что-то помещается в Startup.cs

с этой настройкой i пришлось изменить маршрут моей страницы бритвы с «/ unAuthAccess» на «Ошибки / 401», чтобы отображалась моя страница с несанкционированным доступом:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...