2016-07-12 3 views
19

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

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

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

     var jsonToken = handler.ReadToken(stream); 
    } 

Это ошибка:

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

Если скопировать поток в jwt.io website, он отлично работает :)

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

+1

в JWT, И.О. сайт декодирует его, но нет подписи поэтому он недействителен. – Crowcoder

+0

Возможный дубликат [Декодирование и проверка токена JWT с использованием System.IdentityModel.Tokens.Jwt] (https://stackoverflow.com/questions/18677837/decoding-and-verifying-jwt-token-using-system-identitymodel-tokens- jwt) –

+0

@MichaelFreidgeim, вы правы, это повторяющийся вопрос ... но ответы различны из-за библиотеки версий, которую вы используете – Cooxkie

ответ

32

Я нашел решение, я просто пропустил Cast результата следующим образом:

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

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

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

Мне пришлось бросать tokenS.Claims как список претензий в первую очередь. '((Список ) tokenS.Claims) .ForEach (a => Console.WriteLine (a.Type.ToString() +" "+ a.Value));' –

+0

Для зарегистрированных претензий вы можете получить значение свойства напрямую выключения «JwtSecurityToken». Например, 'tokenS.Id' получит вам значение jti – user875318

+0

Вы также можете сделать: handler.ReadJwtToken (tokenJwtReponse.access_token); –

Смежные вопросы