如何将cookie值转换为Ocelot中的标题值

问题描述 投票:0回答:1

我在dotnet核心中使用微服务架构。我将Ocelot作为api网关(BFF)放在前面。我的主要Web应用程序使用cookie身份验证和cookie中的jwt令牌。这是为了向后兼容。我所有的新API都使用了承载身份验证。我想在Ocelot中从Cookie中获取值并将其插入标头。

我已经看到在配置文件中添加了标头值。然而,由于动态性质,这将需要代码实现。推荐的实现方法是什么?

.net-core api-gateway ocelot
1个回答
0
投票

我们需要change访问令牌的标头,因此在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);

非常好,只需一点即可处理,我们所有的BFF,MS都不在乎!

© www.soinside.com 2019 - 2024. All rights reserved.