Аутентификация не работает после редактирования параметров Cookie - PullRequest
0 голосов
/ 30 июня 2019

In имеют методы контроллера для ajax-запроса с атрибутом authorize.Когда я делаю запрос, когда я не вошел в систему, я получаю перенаправление на страницу входа.Мне нужны неавторизованные, а не данные страницы входа.Чтобы изменить это, я переопределил событие «OnRedirectToLogin».

Вот код:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
        {
            options.LoginPath = "/Identity/Account/Login";
            options.Events.OnRedirectToLogin = ctx => Test(ctx);
        });


private Task Test(RedirectContext<CookieAuthenticationOptions> ctx)
    {
        if (ctx.Request.ContentType != null && ctx.Response.StatusCode == (int) HttpStatusCode.OK)
        {
            if (ctx.Request.ContentType.Contains("application/json"))
            {
                ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
            }
        }
        else
        {
            ctx.Response.Redirect(ctx.RedirectUri);
        }

        return Task.CompletedTask;
    }

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

Что такоеПроблема есть или у вас есть лучший вариант для достижения того же результата без этой проблемы?

Спасибо за вашу помощь!

Обновление: я продолжал искать время, так как сообщение было онлайн,Теперь я обнаружил, что вход в систему работает, но аутентификация на контроллере, по-видимому, больше не.

1 Ответ

0 голосов
/ 30 июня 2019

После еще одного исследования я нашел это решение:

services.AddAuthentication(options =>
        {
            options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;

        }).AddCookie(options =>
        {
            options.LoginPath = "/Identity/Account/Login";
            options.Events.OnRedirectToLogin = ctx =>
            {
                if (ctx.Request.ContentType != null && ctx.Response.StatusCode == (int) HttpStatusCode.OK)
                {
                    if (ctx.Request.ContentType.Contains("application/json"))
                    {
                        ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
                    }
                }
                else
                {
                    ctx.Response.Redirect(ctx.RedirectUri);
                }

                return Task.CompletedTask;
            };
        });

Решающим фактором была установка только «DefaultChallengeScheme»

...