JSON
WEB
TOKENS

By Tommy Marshall

What is JWT

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.

(jwt.io)

A standard for signing, sending and receiving tokens to validate something.

(me)

Using Sessions

Using Tokens

What makes up a JSON WEB TOKEN

  • Header
  • Payload
  • Signature

 

header.payload.signature

xxxxxx.yyyyyy.zzzzzz

 

HEADER

Consists of two parts: the type of the token, which is JWT, and the signing algorithm being used, such as HMAC SHA256 or RSA.

PAYLOAD

Contains the data which is to be serialized and checked against.

SIGNATURE

A hash which is a serialized string consisting base64 encoded of the previous two parts of the token (headers and payload) and a secret that lives on the server.

DEMO

BENEFITS

  • Stateless – No session to manage
  • Portable – Same token used across services
  • Performance  No extra lookups, just validate the signature
  • Decoupled/Decentralized – Auth server to sign tokens, other app/resource servers don't need to auth. Shared sessions across servers is hard!

Drawbacks

  • Tokens live forever – Must expire tokens, enforce algorithm.
  • Refresh Tokens – Store refresh tokens in DB, delete when used to log in.
  • Security – Storing in localStorage, secure XSS. Storing as Cookies, secure CSRF and use httpOnly cookies.
  • Security – You have to protect your secret at all costs... or regenerate a new one.

HUGE Drawbacks

  • Banned Users – They still have valid tokens! 

You're going to need a Database call anyways in case a user's role/permission changes.

Then why?

Using them for services that connect multiple 3rd party services can be useful!

Could we do this?

Thanks!

JWT

By Tommy Marshall

JWT

  • 994