2016-07-12 44 views
19

Non capisco come funzioni questa libreria. Potresti aiutarmi per favore ?Come decodificare il token JWT?

Ecco il mio codice semplice:

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

     var jsonToken = handler.ReadToken(stream); 
    } 

Questo è l'errore:

La stringa deve essere in formato compatto JSON, che è nella forma: Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL, Base64UrlEncodedSignature '.

Se si copia flusso in jwt.io website, funziona benissimo :)

Grazie in anticipo per il vostro aiuto!

+1

la JWT, sito io lo decodifica, ma non c'è la firma quindi non è valido. – Crowcoder

+0

Possibile duplicato di [Decodifica e verifica del token JWT utilizzando System.IdentityModel.Tokens.Jwt] (https://stackoverflow.com/questions/18677837/decoding-and-verifying-jwt-token-using-system-identitymodel-tokens- jwt) –

+0

@MichaelFreidgeim hai ragione è una domanda doppia ... ma le risposte sono diverse a causa della libreria di versioni che usi – Cooxkie

risposta

32

ho trovato la soluzione, ho appena perso per lanciare risultato come segue:

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

Dopo posso ottenere Affermazioni come:

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

Ho dovuto trasmettere tokenS.Claims come prima lista di rivendicazioni. '((Lista ) tokenS.Claims) .ForEach (a => Console.WriteLine (a.Type.ToString() +" "+ a.Value));' –

+0

Per i reclami registrati è possibile ottenere direttamente il valore della proprietà al largo del 'JwtSecurityToken'. Ad esempio, 'tokenS.Id' ti darà il valore jti – user875318

+0

Puoi anche fare: handler.ReadJwtToken (tokenJwtReponse.access_token); –

Problemi correlati