Как установить токен обновления в файлах cookie для OpenIddict Asp.Net Core

Я изучаю OpenIddict, следуя некоторым их примерам, но я не нашел, как установить токен обновления ответа в файлах cookie и использовать файл cookie для аутентификации. Текущее поведение, которое я заставляю работать, заключается в том, что конечная точка Exchange принимаетrefresh_token в теле запроса и возвращает новые access_token иrefresh_token в теле ответа.

Мне удалось настроить некоторые базовые конечные точки контроллера авторизации, я просто хочу использовать файлы cookie только для http для храненияrefresh_token. Я не могу найти способ изменить это поведение в документе openiddict.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

используйте этот код ниже для обработки токена:

public class CustomTokenEndpointHandler : OpenIddictServerEvents
{
    public override Task ProcessSignIn(OpenIddictServerEvents.ProcessSignInContext context)
    {
        var response = context.Transaction.Response;

        // Set the refresh token in an HTTP-only cookie
        context.HttpContext.Response.Cookies.Append(
            "refresh_token",
            response.RefreshToken,
            new CookieOptions
            {
                HttpOnly = true,
                Secure = true,
                SameSite = SameSiteMode.Strict,
                Expires = DateTimeOffset.UtcNow.AddDays(14)
            });

        // Remove the refresh token from the response
        response.RemoveParameter(OpenIddictConstants.Parameters.RefreshToken);

        return Task.CompletedTask;
    }
}

Переопределите поведение по умолчанию для чтения токена обновления из файла cookie:

public class CustomTokenExchangeHandler : OpenIddictServerEvents
{
    public override async Task ProcessAuthentication(OpenIddictServerEvents.ProcessAuthenticationContext context)
    {
        // Check if the request is for token exchange and contains a refresh token grant type
        if (context.Request.IsTokenRequest() && context.Request.IsRefreshTokenGrantType())
        {
            // Read the refresh token from the cookie
            if (context.HttpContext.Request.Cookies.TryGetValue("refresh_token", out var refreshToken))
            {
                context.Request.RefreshToken = refreshToken;
            }
            else
            {
                context.Reject(
                    error: OpenIddictConstants.Errors.InvalidGrant,
                    description: "The refresh token is missing.");
            }
        }

        await base.ProcessAuthentication(context);
    }
}

теперь зарегистрируйте дескриптор в файле program.cs

Большое вам спасибо, я пропустил часть обработчика событий в их документе. Код новой версии немного отличается, но я это понял.

Bsweest 25.06.2024 18:22

Другие вопросы по теме