Implementation and Common Issues of JWT Token Decoding in C#

Nov 21, 2025 · Programming · 12 views · 7.8

Keywords: JWT Decoding | C# Programming | .NET Development | Token Handling | Type Conversion | Claim Extraction

Abstract: This article provides an in-depth exploration of decoding JWT tokens using JwtSecurityTokenHandler in C#, analyzing common type conversion errors and their solutions. By comparing the differences between ReadToken and ReadJwtToken methods with practical code examples, it explains how to correctly extract claim information from JWTs. The discussion also covers JWT basic structure, Base64Url encoding mechanism, and effective debugging techniques in Visual Studio 2022, offering comprehensive technical guidance for .NET developers.

Core Concepts of JWT Token Decoding

JSON Web Token (JWT) is an open standard (RFC 7519) for securely transmitting information between parties as a JSON object. In C# development, Microsoft provides the JwtSecurityTokenHandler class to handle JWT tokens, but developers often encounter issues with type conversion and format parsing during implementation.

Analysis of Common Errors

In the initial code example, the developer used the ReadToken method:

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

While the code is syntactically correct, the ReadToken method returns a SecurityToken object, which is a base class reference. To access JWT-specific properties and methods, explicit type conversion is required.

Implementation Solutions

Method 1: Using Type Conversion

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

Using the as operator to convert SecurityToken to JwtSecurityToken enables access to JWT-specific members.

Method 2: Using Dedicated Method

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

The ReadJwtToken method directly returns a JwtSecurityToken object, eliminating the need for type conversion and making the code more concise and intuitive.

Claim Information Extraction

Once the JwtSecurityToken object is obtained, claim information can be easily extracted:

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

Using LINQ queries allows quick location of specific claim types, such as JWT ID (jti), issuer (iss), audience (aud), and other standard claims.

In-depth Understanding of JWT Structure

JWT consists of three parts separated by dots: Header.Payload.Signature. Each part uses Base64Url encoding:

Base64Url encoding is a variant of Base64 that uses - and _ instead of + and /, and omits padding characters =, making it more suitable for URL transmission.

Development Practice Recommendations

When developing JWT-related features in Visual Studio 2022, it is recommended to:

  1. Use ReadJwtToken method instead of ReadToken to reduce type conversion errors
  2. Add null checks when handling claims to avoid NullReferenceException
  3. Utilize JWT debugging tools (such as jwt.io) to verify token format and content
  4. Pay attention to token expiration and signature verification to ensure security

Error Handling and Debugging

When encountering the "The string needs to be in compact JSON format" error, check:

Through step-by-step debugging and token verification, parsing issues can be quickly identified and resolved.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.