Проверка токена JWT, когда кто-то меняет токен вручную - PullRequest
0 голосов
/ 16 марта 2020

У меня есть вопрос, я подготовил простой механизм аутентификации и авторизации токена JWT, поэтому для проверки этого токена в файле startup.cs в разделе настройки служб я настроил:

services.AddAuthentication("OAuth")
     .AddJwtBearer("OAuth", config =>
     {
         config.TokenValidationParameters = new TokenValidationParameters
         {
             ValidAudience = AuthenticationController.Audience,
             ValidIssuer = AuthenticationController.Issuer,
             ValidateLifetime = true,
             ValidateIssuerSigningKey = true,
             ValidateIssuer = false,
             ValidateAudience = false,
             IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(AuthenticationController.Secret))
          };
     });

И я генерирую токен следующим образом:

var claims = new[]
{
    new Claim(JwtRegisteredClaimNames.Sub, User.Id),
    new Claim(ClaimsIdentity.DefaultRoleClaimType, User.Role)
};

var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Secret));
var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(Issuer, Audience, claims, notBefore: DateTime.Now, expires:     DateTime.Now.AddDays(300), signingCredentials);
var tokenJson = new JwtSecurityTokenHandler().WriteToken(token);

Так что моя проблема в том, что я думаю, что что-то не так с моей проверкой токена, поэтому, например, у меня есть простой метод get с атрибутом [Authorize] на нем без авторизации.

Когда я запускаю его, я получаю 401, так что хорошо, нет токена, нет доступа, отлично, когда я использую сгенерированный токен, все тоже хорошо, но когда я что-то изменяю внутри этого токена, я все еще получаю сообщение с ответом popper (например, заменить один символ в первой части токена) из get.

например мой простой метод get:

    [Authorize]
    [HttpGet, ActionName("GetRecords:)
    public async Task<IActionResult> GetApplications()
    {
        var result = await this.service.GetRecords(this.mapper);
        if (result == null || !result.Any()) return NotFound();
        return Ok(result);
    }

Интересно то, что когда я пробовал то же самое при создании записи (какой-то пост), я получал 401, когда токен меняется вручную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...