# JWT Overview This guide gives an overview of using the JWT provider package. ## Configuration `JWTProvider` can be configured in **3** different ways: - Custom signers defined in `jwt.json` - Supports (private/public): `hmac`, `rsa`, `esdca`. - Legacy custom signer defined in `jwt.json`. - Supports (private/public): `hmac`, `rsa`, `esdca`. - Remote JSON Web Key Set (`jwks.json`) URL - Supports (private/public): `rsa`. If your Vapor app is acting as an Authentication Provider, you may want to use either the `Legacy custom signer` setup, or the `Custom signers` setup, which is great if you want to perform certificates rotation. The only difference is that with `Custom signers` the `kid` value in the `JWT` header is not ignored, and it must match an associated signer in order to verify the signature. If your Vapor app is a Resource Provider that delegates Authentication to a 3rd party (auth0, stormpath, etc), you may want to use the `Remote JSON Web Key Set` setup. In this configuration the JWT token is generated by a 3rd party that provides the public key in JSON Web Key Set format. The Vapor app is only in charge to verify the `JWT` signature using the key set provided by the 3rd party. ### Remote JSON Web Key Set `Config/jwt.json` ```json { "jwks-url": "http://my-domain.com/well-known/jwks.json" } ``` ### Custom Signers This allows to specify an array of signers and is particularly useful for rotating certificates. Custom signers are not backward compatible and must specify an additional `kid` in the configuration. - type: `unsigned`, `hmac`, `rsa`, `esdca` - kid: an unique identifier - algorithm: - type[`hmac`]: `hs256`, `hs384`, `hs512` - type[`rsa`]: `rs256`, `rs384`, `rs512` - type[`esdca`]: `es256`, `es384`, `es512` `Config/jwt.json` ```json { "signers": { "1234": { "type": "rsa", "algorithm": "rs256", "key": "yourkeyhere" } } } ``` ### Legacy Custom Signer This is backwards compatible with the previous implementation. - type: `unsigned`, `hmac`, `rsa`, `esdca` - algorithm: - type[`hmac`]: `hs256`, `hs384`, `hs512` - type[`rsa`]: `rs256`, `rs384`, `rs512` - type[`esdca`]: `es256`, `es384`, `es512` `Config/jwt.json` ```json { "signer": { "type": "rsa", "algorithm": "rs256", "key": "yourkeyhere" } } ```