/token-generator-ldap

JWT token generator web service authenticating against LDAP back end

Primary LanguagePythonMIT LicenseMIT

JWT token generator web service authenticating against LDAP back end

Basic web app that allows a user to generate a JSON Web Token (JWT) authenticating against a LDAP server.

End user usage:

curl -H "Content-Type: application/json"  \
  -X POST -d '{"username": "olssont", "password": "secret" }'  \
  http://localhost:5000/token

Token consumer usage:

curl http://localhost:5000/public_key

Installation:

git clone REPO
cd REPO
pip3 install -r requirements

Configuration:

export FLASK_APP=app.py
export FLASK_CONFIG_FILE=production.cfg
export JWT_PUBLIC_KEY_FILE=~/.ssh/id_rsa.pub
export JWT_PRIVATE_KEY_FILE=~/.ssh/id_rsa

Optionally, the expiration time can changed from the default setting of 15 seconds, in the example below it is extended to two days:

export JWT_ACCESS_TOKEN_EXPIRES=2880

Create a file named production.cfg with contents along the lines of the below to allow the server to pass on the authentication of users to an external LDAP server:

LDAP_HOST="ldap://ldap.famousuni.ac.uk"
LDAP_BASE_DN="ou=users,dc=famousuni,dc=ac,dc=uk"
LDAP_USER_OBJECT_FILTER="(objectclass=person)"
LDAP_SEARCH_FOR_GROUPS=False
LDAP_USER_SEARCH_SCOPE="SUBTREE"
LDAP_USER_LOGIN_ATTR="UID"
LDAP_BIND_USER_DN=""
LDAP_BIND_USER_PASSWORD=""

See flask-ldap3-login documentation for more information on how to configure the connection to the LDAP server.

Starting the server:

flask run

Utility commands:

flask generate-token <username>
flask test-authentication <username>