Хобрук: Ваш путь к мастерству в программировании

Как установить файлы cookie в ядре asp.net во время аутентификации / авторизации

Я пытаюсь установить собственные файлы cookie во время аутентификации / авторизации cookie и openIdConnect в asp.net core 3.1, но безуспешно. Я надеюсь, что кто-то может указать мне правильное направление. Вот моя установка промежуточного программного обеспечения:

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie(option => {

            option.Events = new CookieAuthenticationEvents {
                 //Tried the OnSignedIn() to set the custom cookie but no avail
            }
                
        })
        .AddOpenIdConnect("Is4", options =>
        {
            options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.Authority = "identityserver4.url";
            options.RequireHttpsMetadata = false;
            options.ClientId = "ClientId";
            options.ClientSecret = "ClientSecret";
            options.ResponseType = OpenIdConnectResponseType.Code;
            options.UsePkce = true;
            options.ResponseMode = "form_post";
            options.CallbackPath = "/signin-oidc";
            options.GetClaimsFromUserInfoEndpoint = true;
            options.Scope.Add("openid");
            options.Scope.Add("profile");
            options.Scope.Add("offline_access");
            options.Scope.Add("customer-api"); 
           
            options.SaveTokens = true; 

            options.Events = new OpenIdConnectEvents
            {
                OnUserInformationReceived = (context) =>
                {
                    var accessTokenSplit = context.ProtocolMessage.AccessToken.Split(".");

                    context.Response.Cookies.Append(
                            key: "HeaderPayload",
                            value: $"{accessTokenSplit[0]}.{accessTokenSplit[1]}",
                            options: new CookieOptions
                            {
                                Domain = "localhost:5001",
                                SameSite = SameSiteMode.Strict,
                                Expires = DateTimeOffset.UtcNow.AddMinutes(30),
                                Secure = true,
                                HttpOnly = false
                            }
                        );

                    context.Response.Cookies.Append(
                            key: "Signature",
                            value: $"{accessTokenSplit[2]}",
                            options: new CookieOptions
                            {
                                Domain = "localhost:5001",
                                SameSite = SameSiteMode.Strict,
                                Expires = DateTimeOffset.UtcNow.AddMinutes(30),
                                Secure = true,
                                HttpOnly = true
                            }
                        );

                    return Task.CompletedTask;
                }
        });

HeaderPayload и Signature - это мои пользовательские файлы cookie, которые я хочу, чтобы браузер имел в конце рабочего процесса аутентификации. Вместо этого я вижу только .AspnetCore.CookiesC1 и .AspnetCore.CookiesC2. Я предполагаю, что промежуточное программное обеспечение проверки подлинности файлов cookie не знает о моем настраиваемом файле cookie, который я установил в одном из событий AddCookie () или AddopenIdConnect (). Однако я могу установить эти файлы cookie в настраиваемом промежуточном программном обеспечении с context.Response.Cookies.Append(...), чтобы они отображались в браузере, но у меня не будет доступа к токену доступа JWT, поэтому я предпочитаю обрабатывать его в конвейере аутентификации. Есть мысли или предложения? Спасибо


  • Отвечает ли это на ваш вопрос stackoverflow.com/questions/63228479/? 14.05.2021
  • @VarFreedNull Нет, это не так. У меня уже есть промежуточное ПО для аутентификации и авторизации в методе Configure (). Но я нашел проблему. Пожалуйста, посмотрите мой ответ. 14.05.2021

Ответы:


1

Я обнаружил проблему, и она не имеет ничего общего с промежуточным программным обеспечением Cookie или OpenIdConnect. Параметр Secure=true cookie не позволял браузеру создавать cookie.

Я использую основной шаблон SPA VueJs asp.net. Ядро Asp.net передает все вызовы SPA на сервер разработчика Vuejs webpack. Сервер разработки размещает SPA на http, что НЕ является безопасным соединением, но я настраиваю cookie для использования только с https (Secure=true). Поэтому я не видел cookie в браузере.

Теперь я пытаюсь настроить сервер webpack для использования самозаверяющего сертификата, чтобы ядро ​​asp.net не жаловалось, что не может настроить ssl-соединение из-за неудачной проверки сертификата.

14.05.2021
Новые материалы

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

Введение в Машинное обучение Azure
Машинное обучение Azure (AML) — это облачная служба машинного обучения, которая позволяет быстро и легко создавать, обучать и развертывать модели машинного обучения. Он предоставляет ряд..

Обработка ошибок Javascript
попробовать / поймать / наконец / бросить Обработка ошибок Javascript может помочь отладить код. Это отличный инструмент для понимания и соответствия. Это может быть не самый веселый пост, но,..

Лучшие и необходимые инструменты внешнего интерфейса
Интернет полон различных инструментов программирования, которые помогают современному разработчику делать вещи быстрее и качественнее, чем когда-либо прежде. Если вы наткнулись на эту статью, вы,..

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

Написание собственного кода Java во Flutter для Android
Реализация Java в приложениях Flutter Flutter имеет богатый набор пакетов и виджетов. Вы можете добиться большинства вещей, используя богатый пул виджетов, который предлагает Flutter, или..

ASCII и Юникод (UTF)
ASCII (Американский стандартный код обмена информацией). Представление текста с помощью чисел. Первоначально он был разработан для телетайпов, по сути, для обычного текста без форматирования...