Как преобразовать значение cookie в значение заголовка в Ocelot

Я использую архитектуру микросервисов в ядре dotnet. Я ставлю Ocelot впереди в качестве API-шлюза (BFF). Мое основное веб-приложение использует аутентификацию cookie с токеном jwt в файле cookie. Это для обратной совместимости. Все мои новые API-интерфейсы используют аутентификацию на предъявителя. Я хотел бы в Ocelot получить значение из файла cookie и вставить его в заголовок.

Я видел значения заголовков, добавленные в файл конфигурации. Однако для этого потребуется реализация кода из-за динамического характера. Каков рекомендуемый подход для этого?


person Mohamed Cassim    schedule 24.09.2019    source источник


Ответы (1)


У нас было требование изменить заголовок для нашего токена доступа, поэтому в Ocelot мы сделали следующее:

public class SecurityTokenHandler : DelegatingHandler
    {
        private const string Racoon = "Badger";

        private readonly IHttpContextAccessor contextAccessor;

        public SecurityTokenHandler(IHttpContextAccessor contextAccessor)
        {
            this.contextAccessor = contextAccessor;
        }

        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var httpRequest = this.contextAccessor.HttpContext.Request;

            var securityToken = httpRequest.GetSecurityTokenFromHeader();

            if (!string.IsNullOrWhiteSpace(securityToken))
            {
                request.Headers.Authorization = new AuthenticationHeaderValue(Racoon , securityToken);

                request.Headers.Remove(Constants.OurOldAccessToken);
            }

            return await base.SendAsync(request, cancellationToken);
        }
    }

Зарегистрируйтесь так:

services.AddDelegatingHandler<SecurityTokenHandler>(true);

Отлично работает, одна точка, с которой можно справиться, всем нашим лучшим друзьям и помощникам пофиг!

person PaulD    schedule 09.03.2020