% JWT-GENERATE(1) jwt-generate User Manual | LibJWT C Library

# NAME

**jwt-generate** - Generate a JSON Web Token

# SYNOPSIS

| **jwt-generate**  **\[options]**

# DESCRIPTION

**jwt-generate** Generates and (optionally) signs a JSON Web Token.

By default this will simply encode a JWT. If you want a signature, then
you must give a JWK key with the **-k** option. Generating a signature
requires specifying the algorithm, so it must either be in the key file
(as the **alg** attribute), or passed on the command line with the
**-a** argument.

If **-a** is specified and the key has an **alg** attribute, they must
match.

One token will be generated for each call. You can specify claims using the
**-c** option. By default, **jwt-generate** will add the **iat** claim, which
is **Issued At** and is the time in seconds since the *Unix Epcoch*.

When using the **\-\-verbose** option, **jwt-generate** will print the JSON
_HEADER_ and _PAYLOAD_ to **stdout**.

If used in conjunction with **\-\-print**, the JSON will be piped to the
command's **stdin**. It will be called twice: once for _HEAD_ and once for
_PAYLOAD_.

One use is to pass it through **jq -C** for indenting and colorization. Another
would be to use an external program to inspect the _PAYLOAD_ contents. A non-0
exit status from the program will cause generating the token to fail.

## Options

**\-h**, **\-\-help**
  ~ Show common options and quit.

**\-l**, **\-\-list**
  ~ List all supported algorithms that can be passed to the **-a** option
  and quit.

**\-v**, **\-\-verbose**
  ~ Show the contents of the _HEADER_ and _PAYLOAD_ of the JWT in addition
  to generating the token. **NOTE** the header will not show the **typ** or
  **alg** attributes since they do not get added until the final step.

**\-q**, **\-\-quiet**
  ~ Do not output anything except for hard errors. On success you will only
  see the token generared.

**\-n**, **\-\-no-iat**
  ~ Do not add the iat (Issued-At) time to the token. Useful for a slightly
  smaller token, and for reproducible output.

**\-a** _ALG_, **\-\-algorithm**=_ALG_
  ~ Specify the algorithm to be used when signing the token.

**\-k** _FILE_, **\-\-key**=_FILE_
  ~ Path to a file containing a key in JSON Web Key format. If your keys are
  in PEM or DER (or some other common format that _OpenSSL_ understands), then
  you can convert it to a JWK with the **key2jwk(1)** tool.

**\-c** _CLAIM_, **\-\-claim**=_CLAIM_
  ~ Add a claim to the JWT. The format of _CLAIM_ is **t**:**key**=**value**
  Where **t** is the type and is one of **i** for integer, **s** for string,
  or **b** for boolean. The value for integer must be parseable by **strtol(3)**.
  For boolean, any value starting with **0**, **f**, or **F** will be interpreted
  as **false**. Anything else will be considered **true**. They **key** is any
  *ASCII* string.

**\-j** _JSON_, **\-\-json**=_JSON_
  ~ Use JSON string as the payload of the token. This will not replace, but be added
  to the payload. The string must be in valid JSON, meaning either a **{}** object
  or a **[]** array.

# BUGS

See GitHub Issues: <https://github.com/benmcollins/libjwt/issues>

# AUTHOR

**jwt-generate** was originally written by Jeremy Thien. Major rewriting and man
page by Ben Collins <bcollins@libjwt.io>.

# SEE ALSO

**jwt-verify(1)**, **key2jwk(1)**, **jwk2key(1)**
