Skip to content

scrogson/no-way-jose

Repository files navigation

NoWayJose

Rust NIF for JWT signing

Features

In its current state, this library only supports signing JWTs using the RS512 algo with a DER or PEM encoded RSA private key.

Installation

def deps do
  [
    {:no_way_jose, "~> 0.2.0"}
  ]
end

Generating a key

In order to sign a JWT an RSA private key must be provided.

In code

NoWayJose allows generating an RSA private key directly in code by specifying the number of bits and an encoding format (PEM or DER):

# PEM encoded RSA private key
NoWayJose.generate_rsa(4096, :pem)
# DER encoded RSA private key
NoWayJose.generate_rsa(4096, :der)

Basic usage

# Read a private signing key from a file
{:ok, key} = File.read("private.der")

# Or generate a new one in code
key = NoWayJose.generate_rsa(4096, :der)

# Build your claims
claims = %{
  "exp" => 1571065163,
  "iat" => 1571061563,
  "iss" => "example.com",
  "jti" => "a3a31258-2450-490b-86ed-2b8e67f91e20",
  "nbf" => 1571061563,
  "scopes" => [
    "posts.r+w",
    "comments.r+w"
  ],
  "sub" => "4d3796ca-19e0-40e6-97fe-060c0b7e3ce3"
}

# Sign the claims into a JWT
{:ok, token} = NoWayJose.sign(claims, alg: :rs512, format: :der, key: key)

Documentation

Documentation can be be found at https://hexdocs.pm/no_way_jose.

Roadmap

Please check the Roadmap if you're curious about the future of this project.

Etymology

A rhyming play on words to indicate that this library does not depend on JOSE.

License

Apache 2.0