1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-29 16:30:56 -05:00
denoland-deno/std/jwt
timonson 034ab48086
feat(std/jwt): add a JSON Web Token library (#7991)
Co-authored-by: Tim Reichen <timreichen@users.noreply.github.com>
2020-10-20 14:08:34 +11:00
..
_algorithm.ts feat(std/jwt): add a JSON Web Token library (#7991) 2020-10-20 14:08:34 +11:00
_algorithm_test.ts feat(std/jwt): add a JSON Web Token library (#7991) 2020-10-20 14:08:34 +11:00
_signature.ts feat(std/jwt): add a JSON Web Token library (#7991) 2020-10-20 14:08:34 +11:00
_signature_test.ts feat(std/jwt): add a JSON Web Token library (#7991) 2020-10-20 14:08:34 +11:00
mod.ts feat(std/jwt): add a JSON Web Token library (#7991) 2020-10-20 14:08:34 +11:00
README.md feat(std/jwt): add a JSON Web Token library (#7991) 2020-10-20 14:08:34 +11:00
test.ts feat(std/jwt): add a JSON Web Token library (#7991) 2020-10-20 14:08:34 +11:00

jwt

Create and verify JSON Web Tokens.

JSON Web Token

create

Takes a payload, key and header and returns the url-safe encoded token.

import { create } from "https://deno.land/std/token/mod.ts";

const payload = { foo: "bar" };
const key = "secret";

const token = await create(payload, key); // eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.4i-Q1Y0oDZunLgaorkqbYNcNfn5CgdF49UvJ7dUQ4GVTQvpsMLHABkZBWp9sghy3qVOsec6hOcu4RnbFkS30zQ

Specific algorithm

const token = await create(payload, key, { header: { alg: "HS256" } });

verify

Takes a token, key and an optional options object and returns the payload of the token if the token is valid. Otherwise it throws an Error.

import { verify } from "https://deno.land/std/token/mod.ts";

const token =
  "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.4i-Q1Y0oDZunLgaorkqbYNcNfn5CgdF49UvJ7dUQ4GVTQvpsMLHABkZBWp9sghy3qVOsec6hOcu4RnbFkS30zQ";
const key = "secret";

const payload = await verify(token, key); // { foo: "bar" }

Specific algorithm

const payload = await verify(token, key, { algorithm: "HS256" });

decode

Takes a token to return an object with the header, payload and signature properties if the token is valid. Otherwise it throws an Error.

import { decode } from "https://deno.land/std/token/mod.ts";

const token =
  "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.4i-Q1Y0oDZunLgaorkqbYNcNfn5CgdF49UvJ7dUQ4GVTQvpsMLHABkZBWp9sghy3qVOsec6hOcu4RnbFkS30zQ";

const { payload, signature, header } = await decode(token); // { header: { alg: "HS512", typ: "JWT" }, payload: { foo: "bar" }, signature: "e22f90d58d280d9ba72e06a8ae4a9b60d70d7e7e4281d178f54bc9edd510e0655342fa6c30b1c00646415a9f6c821cb7a953ac79cea139cbb84676c5912df4cd" }

Expiration

The optional exp claim in the payload (number of seconds since January 1, 1970, 00:00:00 UTC) that identifies the expiration time on or after which the JWT must not be accepted for processing. This module checks if the current date/time is before the expiration date/time listed in the exp claim.

const oneHour = 60 * 60;
const token = await create({ exp: Date.now() + oneHour }, "secret");

Algorithms

The following signature and MAC algorithms have been implemented:

Serialization

This application uses the JWS Compact Serialization only.

Specifications