Django Rest Framework Library to use Auth0 authentication
Project description
djangorestframework-auth0
This library let you to authenticate an specific user on DRF based on the JWT Token returned by Auth0 Javascript libraries.
Installation
- Using
pip
install the library cloning the repository with following command:
pip install rest_framework_auth0
Quick start
- Make sure "django.contrib.auth in on INSTALLED_APPS setting, otherwise add it by your own:
INSTALLED_APPS = [
...
'django.contrib.auth',
...
]
This will allow us to login as an specific user as well as auto-creating users when they don't exist
- Add "rest_framework_auth0" to your INSTALLED_APPS after
rest_framework_jwt
setting like this:
INSTALLED_APPS = [
...,
'rest_framework_jwt',
'rest_framework_auth0',
]
- Add
Auth0JSONWebTokenAuthentication
in your DEFAULT_AUTHENTICATION_CLASSES located at settings.py from your project:
REST_FRAMEWORK = {
...,
'DEFAULT_AUTHENTICATION_CLASSES': (
...,
'rest_framework_auth0.authentication.Auth0JSONWebTokenAuthentication',
),
}
- Add your AUTH0_CLIENT_SECRET and AUTH0_CLIENT_ID in your settings.py file -must be the same secret and id than the frontend App-:
AUTH0 = {
'CLIENTS': {
'default': {
'AUTH0_CLIENT_ID': '<YOUR_AUTH0_CLIENT_ID>', #make sure it's the same string that aud attribute in your payload provides
'AUTH0_CLIENT_SECRET': '<YOUR_AUTH0_CLIENT_SECRET>',
'CLIENT_SECRET_BASE64_ENCODED': True, # default to True, if you're Auth0 user since December, maybe you should set it to False
'AUTH0_ALGORITHM': 'HS256',
}
},
'JWT_AUTH_HEADER_PREFIX': 'JWT', # default prefix used by djangorestframework_jwt
'AUTHORIZATION_EXTENSION': False, # default to False
'USERNAME_FIELD': 'sub', # default username field in auth0 token scope to use as token user
}
- Add the
Authorization
Header to all of your REST API request, prefixing JWT to your token:
Authorization: JWT <AUTH0_GIVEN_TOKEN>
-
Use the decorator
@token_required
in all views you want to protect (not_ready_yet) -
That's it
Multiple Clients - Multiples App - One API
If you wanna to use multiple Auth0 App and/or Clients -for example if you're creating an open API, you can add as much as you want in the AUTH0.CLIENTS settings parameter
AUTH0 = {
'CLIENTS': {
'default': {
'AUTH0_CLIENT_ID': '<YOUR_AUTH0_CLIENT_ID>', #make sure it's the same string that aud attribute in your payload provides
'AUTH0_CLIENT_SECRET': '<YOUR_AUTH0_CLIENT_SECRET>',
'CLIENT_SECRET_BASE64_ENCODED': True, # default to True, if you're Auth0 user since December, maybe you should set it to False
}
'web': {
'AUTH0_CLIENT_ID': '<YOUR_AUTH0_CLIENT_ID>', #make sure it's the same string that aud attribute in your payload provides
'AUTH0_CLIENT_SECRET': '<YOUR_AUTH0_CLIENT_SECRET>',
'CLIENT_SECRET_BASE64_ENCODED': True, # default to True, if you're Auth0 user since December, maybe you should set it to False
}
'mobile': {
'AUTH0_CLIENT_ID': '<YOUR_AUTH0_CLIENT_ID>', #make sure it's the same string that aud attribute in your payload provides
'AUTH0_CLIENT_SECRET': '<YOUR_AUTH0_CLIENT_SECRET>',
'CLIENT_SECRET_BASE64_ENCODED': True, # default to True, if you're Auth0 user since December, maybe you should set it to False
}
},
...
}
In order to select one of them when the authentication is needed -a POST request, for example- you need to add a header called Client-Code -by default, but you can customize it-. The names of the clients are case sensitive.
Migrations
RS256 Support
If you wanna use RS256, please follow the Sample Project
Sample Project
A sample project can be found here
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for rest_framework_auth0-0.5.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7e2804994015ba6ea91000777ee02528afad50313fa968483ec3a07f097ae39 |
|
MD5 | 921963d8a5c0e11076b4ba80e6a263d4 |
|
BLAKE2b-256 | 89ef8c04f71c7a33afe0aaab3c38f0e2e145779a933ce84b5ca9afc6d7a5a919 |
Hashes for rest_framework_auth0-0.5.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0fd01d8f515c351245458bcc64b6dcb881e7716d4740aca1a07237e12ab943b4 |
|
MD5 | d8be49f0b8325bcc2a060740397440e1 |
|
BLAKE2b-256 | 0386f9ce814d38868aff2bb82cd5ca623542deb70de3b22adcb0b495ea0a51f9 |