Настройки аутентификации, если точнее валидации токена:
builder.Services.AddAuthentication(auth =>
{
auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
auth.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer((opts) =>
{
opts.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = jwtOptions.GetSymmetricSecurityKey(),
ValidateLifetime = true,
ValidAlgorithms = new List<string> { jwtOptions.Algorithm },
LifetimeValidator = (notBefore, expires, securityToken, validationParameters) =>
{
if (expires != null)
return expires.Value > DateTime.UtcNow;
return false;
}
};
opts.Events = new JwtBearerEvents
{
OnMessageReceived = async (context) =>
{
if (string.IsNullOrEmpty(context.Token) &&
context.Request.Cookies.TryGetValue(jwtOptions.TokenNameInCookies, out var token))
{
context.Token = "Bearer " + token;
}
await Task.CompletedTask;
}
};
});
Вот метод который отвечает за генерацию токена:
public string Generate(UserEntity user)
{
var signingCredentials = new SigningCredentials(
_options.GetSymmetricSecurityKey(),
_options.Algorithm);
var claims = new Claim[]
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim("userName", user.Name),
new Claim("userEmail", user.Email)
};
var token = new JwtSecurityToken(
//issuer: _options.Issuer,
//audience: _options.Audience,
claims: claims,
notBefore: DateTime.UtcNow,
expires: DateTime.UtcNow.AddMinutes(_options.AccessTokenExpiresMinutes),
signingCredentials: signingCredentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}
Конфигурация appsettings.Development.json(среда у меня именно разработчика):
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft.AspNetCore": "Trace"
}
},
"AllowedHosts": "*",
"Jwt":{
"Issuer": "localhost",
"Audience": "",
"Algorithm": "HS256",
"AccessTokenExpiresMinutes": 15,
"RefreshTokenExpiresHours": 12,
"SecretKey": "secretKeysecretKeysecretKeysecretKeysecretKeysecretKeysecretKeyvsecretKeysecretKeysecretKey",
"TokenNameInCookie": "jwtToken"
}
}
Отравляю токен в виде хеддера, почему не валидный я не знаю, вроде все должно работтаь, audience и issuer не обезательны(делал без них на др проекте, работало).