Измените имя заголовка в nginx для базовой аутентификации или aspnetcore для jwt

У меня сложная проблема. Моя проблема в том, что я использую веб-сайт asp.net core 2.0 с jwt. Когда JWT передает токен, он имеет имя заголовка как Authentication, теперь мне нужно добавить HTTP Basic Auth для Nginx, который также использует тот же заголовок. после входа в систему Nginx показывает 403, поскольку он переопределяет заголовок.

Мне нужно изменить заголовок JWT или Nginx, в зависимости от того, что возможно.

0
0
822
2

Ответы 2

Моя проблема решена

Вам необходимо установить переопределение события OnMessageReceived:

https://github.com/aspnet/AspNetCore/issues/3728

Решаю с этим в 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
            };
        });

И в Startup.Configure

app.UseAuthentication();

Объяснение того, как ваш ответ решает проблему, поможет другим воспользоваться вашим решением. См. Как ответить.

Ctrl S 03.04.2019 15:29

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