decodeJwt function
Decodes a JWT token without performing validation
Returns a DecodedJwt containing the header, payload, signature, and raw parts. Throws AuthInvalidJwtException if the JWT structure is invalid.
Implementation
DecodedJwt decodeJwt(String token) {
final parts = token.split('.');
if (parts.length != 3) {
throw AuthInvalidJwtException('Invalid JWT structure');
}
final rawHeader = parts[0];
final rawPayload = parts[1];
final rawSignature = parts[2];
try {
// Decode header
final headerJson = Base64Url.decodeToString(rawHeader);
final header = JwtHeader.fromJson(json.decode(headerJson));
// Decode payload
final payloadJson = Base64Url.decodeToString(rawPayload);
final payload = JwtPayload.fromJson(json.decode(payloadJson));
// Decode signature
final signature = Base64Url.decodeToBytes(rawSignature);
return DecodedJwt(
header: header,
payload: payload,
signature: signature,
raw: JwtRawParts(
header: rawHeader,
payload: rawPayload,
signature: rawSignature,
),
);
} catch (e) {
if (e is AuthInvalidJwtException) {
rethrow;
}
throw AuthInvalidJwtException('Failed to decode JWT: $e');
}
}