Я пытаюсь разрешить неподписанные токены JWT через (для тестирования):
var keyBytes = Encoding.ASCII.GetBytes("example_key_example_key_example_key");
services.AddAuthentication(options => {
options.DefaultAuthenticateScheme = "jwt";
options.DefaultChallengeScheme = "jwt";
}).AddJwtBearer("jwt", options => {
options.RequireHttpsMetadata = false;
options.SaveToken = false;
options.TokenValidationParameters = new TokenValidationParameters {
IssuerSigningKey = new SymmetricSecurityKey(keyBytes),
RequireSignedTokens = false,
ValidateTokenReplay = false,
RequireExpirationTime = false,
ValidateActor = false,
ValidateIssuerSigningKey = false,
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = false,
};
});
А в контроллере схема выше используется так:
[HttpGet("resource")]
[Authorize(AuthenticationSchemes = "jwt")]
public string GetResource() {
return "protected resource";
}
Я ожидаю, что он ответит со статусом 200 и "защищенным ресурсом" в теле, вместо этого он отвечает 401 (неавторизованным)
Запрос содержит токен на предъявителя без подписи, пример: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjVjYjYxOTYyYzdmZGM0NjUzOGE3MzQ4NiIsInJvbGUiOiJ1c2VyIiwibmJmIjoxNTU1NTc4OTUwLCJleHAiOjE1NTk4OTg5NDksImlhdCI6MTU1NTU3ODk1MCwiaXNzIjoidHJhZGVfYm90IiwiYXVkIjoidHJhZGVfYm90In0