在nginx中为基本身份验证更改头名称,或为JWT更改Aspnetcore头名称
我遇到了一个难题。我的问题是我正在使用asp.NETCore2.0网站和jwt。当JWT传递令牌时,它有一个头名称作为身份验证,现在我需要添加Nginx的HTTP Basic Auth,它也使用相同的头。登录后,Nginx显示403,因为它覆盖了头在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
我需要更改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();