jwt-cli is a utility to encode/decode JWT token.
Tool to encode/decode JWT token
Usage:
jwt-cli [command]
Available Commands:
decode decode JWT token
encode encode JWT token
genkeys print commands example to generate keys for ES256, ES384, ES512, RS256, RS384, RS512
help Help about any command
version print version of jwt-cli
Flags:
-h, --help help for jwt-cli
Use "jwt-cli [command] --help" for more information about a command.
Supported methods are actually:
- HS256
- HS384
- HS512
- ES256
- ES384
- ES512
- RS256
- RS384
- RS512
- Download the release
- Install the binary in /usr/local/bin
brew tap sgaunet/homebrew-tools
brew install sgaunet/tools/jwt-cli
Possibility to copy the binary by using the docker image
FROM sgaunet/jwt-cli:latest as jwtcli
FROM ....
COPY --from jwtcli /jwt-cli /usr/bin/jwt-cli
Quite easy, this tool will help you to encode/decode JWT tokens.
# encode
$ jwt-cli encode hs512 --payload '{ "email": "myemail@me.com" }' --secret "myAwesomeSecret"
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im15ZW1haWxAbWUuY29tIn0.SE0u1AWrDTHv67PnUALZl8VQ-7rnSXBNDTCVT_Dj12FStO6hL0ak0i4imcUHpWBEh-c5oSc-H90prGQ0oZx6ng
# try to decode with a wrong secret
$ jwt-cli decode hs512 --secret "wrong secret" --token "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im15ZW1haWxAbWUuY29tIn0.SE0u1AWrDTHv67PnUALZl8VQ-7rnSXBNDTCVT_Dj12FStO6hL0ak0i4imcUHpWBEh-c5oSc-H90prGQ0oZx6ng"
signature is invalid
# decode with the good secret
$ jwt-cli decode hs512 --secret "myAwesomeSecret" --token "eyJhbGciOiJIUzUxMiIsInR
5cCI6IkpXVCJ9.eyJlbWFpbCI6Im15ZW1haWxAbWUuY29tIn0.SE0u1AWrDTHv67PnUALZl8VQ-7rnSXBNDTCVT_Dj12FStO6hL0ak0i4imcUHpWBEh-c5oSc-H90prGQ0oZx6ng"
{
"email": "myemail@me.com"
}
jwt-cli supports shell completion for bash, zsh, fish, and PowerShell. This enables TAB completion for commands, subcommands, and flags.
On macOS (using Homebrew):
jwt-cli completion bash > $(brew --prefix)/etc/bash_completion.d/jwt-cli
source ~/.bashrcOn Linux:
sudo jwt-cli completion bash > /etc/bash_completion.d/jwt-cli
source ~/.bashrc# Create completions directory if it doesn't exist
mkdir -p ~/.zsh/completions
# Generate completion file
jwt-cli completion zsh > ~/.zsh/completions/_jwt-cli
# Add to .zshrc if not already present:
# fpath=(~/.zsh/completions $fpath)
# autoload -Uz compinit && compinitjwt-cli completion fish > ~/.config/fish/completions/jwt-cli.fish# For current session
jwt-cli completion powershell | Out-String | Invoke-Expression
# For persistent installation, add to your PowerShell profile:
jwt-cli completion powershell >> $PROFILEAfter installation and restarting your shell:
jwt-cli <TAB> # Shows: encode, decode, genkeys, version, help
jwt-cli encode <TAB> # Shows: hs256, hs384, hs512, rs256, rs384, rs512, es256, es384, es512
jwt-cli encode hs256 -<TAB> # Shows available flags
jwt-cli decode rs256 --private-key <TAB> # Shows .pem and .key filesIf completion doesn't work:
- Verify jwt-cli is in your PATH:
which jwt-cli - Restart your shell or open a new terminal window
- For Zsh, ensure fpath includes your completions directory
- Check that completion files are in the correct location
For more information: jwt-cli completion --help
This project is using :
- golang 1.23+
- task for development
- docker
- docker buildx
- docker manifest
- goreleaser
The docker image is only created to simplify the copy of jwt-cli in another docker image.
ssh-keygen -t rsa -b 4096 -E SHA256 -m PEM -P "" -f RS256-private.pem
openssl rsa -in RS256-private.pem -pubout -outform PEM -out RS256-public.pem
ssh-keygen -t rsa -b 4096 -E SHA384 -m PEM -P "" -f RS384-private.pem
openssl rsa -in RS384-private.pem -pubout -outform PEM -out RS384-public.pem
ssh-keygen -t rsa -b 4096 -E SHA512 -m PEM -P "" -f RS512-private.pem
openssl rsa -in RS512-private.pem -pubout -outform PEM -out RS512-public.pem
openssl ecparam -genkey -name prime256v1 -noout -out ES256-private.pem
openssl ec -in ES256-private.pem -pubout -out ES256-public.pem
openssl ecparam -name secp384r1 -genkey -noout -out ES384-private.pem
openssl ec -in ES384-private.pem -pubout -out ES384-public.pem
openssl ecparam -genkey -name secp521r1 -noout -out ES512-private.pem
openssl ec -in ES512-private.pem -pubout -out ES512-public.pem
