HEADER=$(printf '{"alg":"HS256","typ":"JWT"}' | openssl base64 -e -A | tr '+/' '-_' | tr -d '=') PAYLOAD=$(cat payload.json | openssl base64 -e -A | tr '+/' '-_' | tr -d '=') SIGNATURE=$(printf "%s.%s" "$HEADER" "$PAYLOAD" | openssl dgst -binary -sha256 -hmac "my-secret-key" | openssl base64 -e -A | tr '+/' '-_' | tr -d '=') echo "$HEADER.$PAYLOAD.$SIGNATURE" eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJzdWIiOiAiMTIzNDU2Nzg5MCIsCiAgIm5hbWUiOiAia3Jha2hlbi5kZXYiLAogICJhZG1pbiI6IHRydWUsCiAgImlhdCI6IDE1MTYyMzkwMjIKfQo.LspWRdaIXcXllUuABCsYXRqBoKseG5vlb_YIW259aiU