Search code examples
c#.netvisual-studiojwtvisual-studio-2022

How to decode JWT Token?


I don't understand how this library works. Could you help me please ?

Here is my simple code :

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

        var jsonToken = handler.ReadToken(stream);
    }

This is the error :

The string needs to be in compact JSON format, which is of the form: Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL,Base64UrlEncodedSignature'.

If you copy the stream in jwt.io website, it works fine :)


Solution

  • I found the solution, I just forgot to Cast the result:

    var stream = "[encoded jwt]";  
    var handler = new JwtSecurityTokenHandler();
    var jsonToken = handler.ReadToken(stream);
    var tokenS = jsonToken as JwtSecurityToken;
    

    Or, without the cast:

    var token = "[encoded jwt]";  
    var handler = new JwtSecurityTokenHandler();
    var jwtSecurityToken = handler.ReadJwtToken(token);
    

    I can get Claims using:

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