simple-auth/README.md

2.1 KiB

simple-auth

A little web server providing JWT token for auth user.

Build

cargo build --release

Configuration

Store

The store represents the credentials. For now, this a .txt file with plain passwords. You have to create one like:

# acts as a comment (only on a start line)
<email>:<password>

WARN: the file should have a chmod to 600.

RSA key pair creation

The server uses RS384 signature algorithm (asymmetric). You have to create a private key to sign the token and a public key for the validation:

openssl genrsa -out priv.pem 2048
openssl rsa -in priv.pem -outform PEM -pubout -out pub.pem

WARN: those files must be readable be the server user.

INI file

To start the server correctly, you need to create an .ini file as below:

[server]
url = <ip>:<port>

[store]
path = <store_path>

[jwt]
issuer = <issuer.fr>
private_key = <priv_key_path> 
public_key = <pub_key_path>
expiration_time = 2 # in hours

Run

./simple-auth <ini_path>

# get a JWT
curl http://<ip>:<port>/get/ -d '{"email":"<email>", "password":"<password>"}'
# should returned
{"token":"<header>.<payload>.<signature>"}

# validate a JWT
curl http://<ip>:<port>/validate/ -d '{"token":"<header>.<payload>.<signature>"}'
# should returned (if valid)
{"valid":"true"}

# get the public key for local validation
curl http://<ip>:<port>/pubkey/
{"pubkey":"<b64_encoded_public_key>"}

Test

unit tests

cargo test

integration tests

  • do the configuration step for your env tests
  • set the following env variables:
export SIMPLE_AUTH_URL="http://<url>:<port>"
export SIMPLE_AUTH_PUB_KEY="<path_to_pem_pub_key>" # DO NOT USE THIS ONE IN PRODUCTION !
  • run the server (if no one is running remotly)
  • run curl tests
cd tests/bash/
./curling.bash && echo "passed"
  • run python tests
# create a python venv
cd tests/python
python3 -m venv venv
source venv/bin/activate

# install the requirements
pip install -r requirements

# launch the tests
python -m unittest

Documentation

# add the '--open' arg to open the doc on a browser
cargo doc -r --no-deps