Как сделать так, чтобы схема проверки подлинности cookie генерировала относительный URL-адрес входа в систему вместо абсолютного? - PullRequest
1 голос
/ 03 июля 2019

Когда схема аутентификации ASP.NET Core перенаправляет на страницу входа, он отправляет абсолютный URL-адрес в браузер.

Возможно ли сделать этот URL-адрес относительным?

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Вы можете обработать событие OnRedirectToLogin, чтобы предоставить собственную логику для процесса перенаправления. Вот пример реализации:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(o =>
    {
        o.Events = new CookieAuthenticationEvents
        {
            OnRedirectToLogin = ctx =>
            {
               var relativeRedirectUri = new Uri(ctx.RedirectUri).PathAndQuery;

               context.Response.Headers["Location"] = relativeRedirectUri;
               context.Response.StatusCode = 401;

               return Task.CompletedTask;
           }
       };
   });

Переданное свойство ctx.RedirectUri является абсолютным, поэтому приведенный выше код создает относительную копию и использует ее вместо этого.

Реализация по умолчанию, которую он заменяет, немного сложнее, поскольку поддерживает как запросы AJAX, которые возвращают запросы 401, так и не-AJAX, которые выполняют перенаправление. Если вам нужно поддерживать оба, взгляните на source и измените его соответствующим образом.

1 голос
/ 03 июля 2019

RFC2616 , который ранее определял заголовок Location, используемый в перенаправлениях, указывал, что URI должен быть абсолютным. С тех пор это было заменено RFC7231 в 2014 году, что позволяет относительные пути в заголовке Location. Однако из-за примерно 15 лет, прошедших между ними, абсолютное местоположение все еще отправляется для поддержания совместимости. Конечно, теперь, когда мы приближаемся к 2020 году, я думаю, что большинство клиентов на данный момент фактически поддерживают относительные местоположения, но пока, по крайней мере, ASP.NET Core все еще отправляет абсолютное значение.

...