2016-07-12 13 views
19

Ich verstehe nicht, wie diese Bibliothek funktioniert. Kannst du mir bitte helfen ?Wie JWT Token zu dekodieren?

Hier ist mein einfacher Code:

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

     var jsonToken = handler.ReadToken(stream); 
    } 

Dies ist Fehler:

Die Zeichenfolge in kompaktem JSON-Format sein muss, die von der Form: Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL, Base64UrlEncodedSignature ".

Wenn Sie Strom in jwt.io website kopieren, funktioniert es für Ihre Hilfe :)

Vielen Dank im Voraus gut!

+1

der jwt, io-Website es decodiert, aber es gibt keine Unterschrift also ist es ungültig. – Crowcoder

+0

Mögliches Duplikat von [Dekodieren und Verifizieren des JWT-Tokens mithilfe von System.IdentityModel.Tokens.Jwt] (https://StackOverflow.com/questions/18677837/decoding-and-verifying-jwt-token-using-system-identitymodel-token- jwt) –

+0

@MichaelFreigidim du hast Recht, es ist doppelte Frage ... aber die Antworten unterscheiden sich aufgrund der Version Bibliothek, die Sie verwenden – Cooxkie

Antwort

32

I-Lösung gefunden, vermisste ich nur Ergebnis wie folgt Cast:

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

Nachdem ich Ansprüche wie bekommen:

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

Ich musste TokenS.Claims zuerst als eine Liste der Ansprüche zu werfen. '((Liste ) tokenS.Claims) .ForEach (a => Console.WriteLine (a.Type.ToString() +" "+ a.Value));' –

+0

Für registrierte Ansprüche können Sie den Eigenschaftswert direkt erhalten aus dem 'JwtSecurityToken'. Zum Beispiel erhält 'tokenS.Id' den jti-Wert – user875318

+0

Sie können auch: handler.ReadJwtToken (tokenJwtReponse.access_token); –