JWT Tools

JWT Signer

Generate HS/RS/ES signatures, manage keypairs, and export tokens for staging environments.

Updated 2024-01-15

JWT Signer

Build HS tokens with custom claims, audience, issuer, subject, and exp/nbf/iat controls.

Custom claims (JSON)

Token

Generated token will appear here.

Code samples (HS only)

Uses your current claims/secret

JavaScript (jsonwebtoken)

import jwt from 'jsonwebtoken';

const payload = {
  "aud": "utilz",
  "iss": "utilz.io",
  "sub": "user-123",
  "exp": 1765177354,
  "nbf": 1765173754,
  "iat": 1765173754,
  "role": "admin",
  "scopes": [
    "read",
    "write"
  ]
};
const token = jwt.sign(payload, 'supersecret', { algorithm: 'HS256' });
console.log(token);

Python (PyJWT)

import jwt

payload = {
  "aud": "utilz",
  "iss": "utilz.io",
  "sub": "user-123",
  "exp": 1765177354,
  "nbf": 1765173754,
  "iat": 1765173754,
  "role": "admin",
  "scopes": [
    "read",
    "write"
  ]
}
token = jwt.encode(payload, "supersecret", algorithm="HS256")
print(token)

Go (golang-jwt/jwt/v5)

import (
  "fmt"
  "encoding/json"
  "github.com/golang-jwt/jwt/v5"
)

var claims jwt.MapClaims
_ = json.Unmarshal([]byte(`{"aud":"utilz","iss":"utilz.io","sub":"user-123","exp":1765177354,"nbf":1765173754,"iat":1765173754,"role":"admin","scopes":["read","write"]}`), &claims)
tok := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
signed, _ := tok.SignedString([]byte("supersecret"))
fmt.Println(signed)

Java (jjwt)

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import io.jsonwebtoken.SignatureAlgorithm;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.*;

String json = "{\"aud\":\"utilz\",\"iss\":\"utilz.io\",\"sub\":\"user-123\",\"exp\":1765177354,\"nbf\":1765173754,\"iat\":1765173754,\"role\":\"admin\",\"scopes\":[\"read\",\"write\"]}";
Map<String, Object> claims = new ObjectMapper().readValue(json, new TypeReference<Map<String, Object>>() {});
String token = Jwts.builder()
  .setClaims(claims)
  .signWith(Keys.hmacShaKeyFor("supersecret".getBytes()), SignatureAlgorithm.HS256)
  .compact();
System.out.println(token);

C# (.NET JwtSecurityToken)

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Security.Claims;

var payload = JsonSerializer.Deserialize<Dictionary<string, object>>(@"{""aud"":""utilz"",""iss"":""utilz.io"",""sub"":""user-123"",""exp"":1765177354,""nbf"":1765173754,""iat"":1765173754,""role"":""admin"",""scopes"":[""read"",""write""]}");
var claims = new List<Claim>();
foreach (var kvp in payload)
  claims.Add(new Claim(kvp.Key, kvp.Value?.ToString() ?? string.Empty));
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("supersecret"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(claims: claims, signingCredentials: creds);
var encoded = new JwtSecurityTokenHandler().WriteToken(token);
Console.WriteLine(encoded);

Rust (jsonwebtoken)

use jsonwebtoken::{encode, Header, EncodingKey, Algorithm};
use serde_json::json;

let claims = json!({
  "aud": "utilz",
  "iss": "utilz.io",
  "sub": "user-123",
  "exp": 1765177354,
  "nbf": 1765173754,
  "iat": 1765173754,
  "role": "admin",
  "scopes": [
    "read",
    "write"
  ]
});
let mut header = Header::new(Algorithm::HS256);
let token = encode(&header, &claims, &EncodingKey::from_secret(b"supersecret")).unwrap();
println!("{}", token);

Related tools

JWT Signer | JWT Tools