Как декодировать токен JWT?

Я не понимаю, как работает эта библиотека. Не могли бы вы мне помочь, пожалуйста ?

Вот мой простой код:

public void TestJwtSecurityTokenHandler() { var stream = "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJJU1MiLCJzY29wZSI6Imh0dHBzOi8vbGFyaW0uZG5zY2UuZG91YW5lL2NpZWxzZXJ2aWNlL3dzIiwiYXVkIjoiaHR0cHM6Ly9kb3VhbmUuZmluYW5jZXMuZ291di5mci9vYXV0aDIvdjEiLCJpYXQiOiJcL0RhdGUoMTQ2ODM2MjU5Mzc4NClcLyJ9"; var handler = new JwtSecurityTokenHandler(); var jsonToken = handler.ReadToken(stream); } 

Это ошибка:

Строка должна быть в компактном формате JSON, который имеет форму: Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL, Base64UrlEncodedSignature ‘.

Если вы копируете stream на веб-сайте jwt.io , он отлично работает 🙂

Заранее спасибо за вашу помощь !

Я нашел решение, я просто пропустил результат Cast, как показано ниже:

 var tokenS = handler.ReadToken(tokenJwtReponse.access_token) as JwtSecurityToken; 

После того, как я получу претензии:

  var jti = tokenS.Claims.First(claim => claim.Type == "jti").Value; 

new JwtSecurityTokenHandler().ReadToken("") вернет SecurityToken

new JwtSecurityTokenHandler().ReadJwtToken("") вернет JwtSecurityToken

Если вы просто измените метод, который используете, вы можете избежать приведения в приведенном выше ответе

Вам нужна секретная строка, которая использовалась для создания токена шифрования. Этот код работает для меня:

 protected string GetName(string token) { string secret = "this is a string used for encrypt and decrypt token"; var key = Encoding.ASCII.GetBytes(secret); var handler = new JwtSecurityTokenHandler(); var tokenSecure = handler.ReadToken(token) as SecurityToken; var validations = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false }; var claims = handler.ValidateToken(token, validations, out tokenSecure); return claims.Identity.Name; } 

Используя пакеты .net core jwt, претензии доступны:

 [Route("api/[controller]")] [ApiController] [Authorize(Policy = "Bearer")] public class AbstractController: ControllerBase { protected string UserId() { var principal = HttpContext.User; if (principal?.Claims != null) { foreach (var claim in principal.Claims) { log.Debug($"CLAIM TYPE: {claim.Type}; CLAIM VALUE: {claim.Value}"); } } return principal?.Claims?.SingleOrDefault(p => p.Type == "username")?.Value; } } 
Давайте будем гением компьютера.