在nginx中为基本身份验证更改头名称,或为JWT更改Aspnetcore头名称

在nginx中为基本身份验证更改头名称,或为JWT更改Aspnetcore头名称,nginx,asp.net-core,jwt,Nginx,Asp.net Core,Jwt,我遇到了一个难题。我的问题是我正在使用asp.NETCore2.0网站和jwt。当JWT传递令牌时,它有一个头名称作为身份验证,现在我需要添加Nginx的HTTP Basic Auth,它也使用相同的头。登录后,Nginx显示403,因为它覆盖了头 我需要更改JWT头或Nginx头,以可能的为准。我的问题已经解决 您需要设置覆盖OnMessageReceived事件: 我在Startup.ConfigureServices中解决了这个问题 var appSettings = appSetting

我遇到了一个难题。我的问题是我正在使用asp.NETCore2.0网站和jwt。当JWT传递令牌时,它有一个头名称作为身份验证,现在我需要添加Nginx的HTTP Basic Auth,它也使用相同的头。登录后,Nginx显示403,因为它覆盖了头


我需要更改JWT头或Nginx头,以可能的为准。

我的问题已经解决

您需要设置覆盖OnMessageReceived事件:


我在Startup.ConfigureServices中解决了这个问题

var appSettings = appSettingsSection.Get<AppSettings>();
        var key = Encoding.ASCII.GetBytes(appSettings.Secret);
        services.AddAuthentication(x =>
        {
            x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })

        .AddJwtBearer(x =>
        {
            x.Events = new JwtBearerEvents()
            {
                OnMessageReceived = context =>
                {
                    var header = context.HttpContext.Request.Headers["custom-header"].ToString();

                    if (!string.IsNullOrEmpty(header) && header.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
                    {
                        context.Token = header.Substring("Bearer ".Length).Trim();
                    }

                    return Task.CompletedTask;
                }
            };
            x.RequireHttpsMetadata = false;
            x.SaveToken = true;
            x.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(key),
                ValidateIssuer = false,
                ValidateAudience = false
            };
        });

解释你的答案如何解决问题将有助于其他人利用你的解决方案。看见
app.UseAuthentication();