Multiprovider Authentication
Multiprovider Authentication is an easy to setup authentication middleware with support for Django REST Framework and multiple OAuth2/OIDC Identity Providers that issue opaque or JWT access tokens, e.g. Auth0, Globus, etc.
Rationale
Many authentication middleware packages have been writted for Django REST Framework with
support for OAuth2 opaque or JWT token. Most popular ones are listed with a short description
on Django REST Framework - Authentication. But all of them that support opaque tokens
require access to the Identity Provider database to verify the access tokens. Or they cannot be
stack up with other authentication classes to authenticate a bearer token against multiple
Identity Providers. The Multiprovider Authentication middleware fills up the gap. It supports all
Identity Providers that issue JWT tokens and Globus that issues opaque access tokens. Support
for other Identity Providers can easily be added by creating a new backend in mp_auth/backends.
Each backend can be used separately as an Django REST Framework authentication class, or can be a part of
list of authentication class that Django REST Framework will go through to authenticate an HTTP request.
mp_auth.backend.mp.MultiproviderAuthentication is a special authentication class that calls all
authentication classes configured in settings.py.
Setup
Install the Multiprovider Authentication middleware for Django REST Framework (Python 3 is required)
pip install mp-auth
and in settings.py set the following:
INSTALLED_APPS [
...
'mp_auth',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'mp_auth.backends.mp.MultiproviderAuthentication',
)
}
MULTIPROVIDER_AUTH = {
"BearerTokens": {
"globus": {
"scope": [<scopes>],
"aud": <audience>
}
},
"JWT": {
<issuer>": {
"aud": <audience>
}
}
}
GLOBUS_CLIENT_ID = <OAuth2 client id>
GLOBUS_CLIENT_SECRET = <OAuth2 client secret>
Then any view can be protected by JWTAuthentication or GlobusAuthentication, or, if you want to
authenticate an HTTP request against both JWTAuthentication or GlobusAuthentication, by
MultiproviderAuthentication class.
from mp_auth.backends.mp import MultiproviderAuthentication
class MyAPIView(APIView):
authentication_classes = (MultiproviderAuthentication,)
renderer_classes = (JSONRenderer,)
def get(self, request, format=None):
user = request.user
return Response({"username": user.username})
Metadata
Release files for mp-auth 0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mp_auth-0.3-py3-none-any.whl | Python 3 | none | any | Details |
Release files / mp_auth-0.3-py3-none-any.whl
| Download URL | mp_auth-0.3-py3-none-any.whl |
|---|---|
| Size | 13.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1f25bdadd2f24babb2ee2465156b7ddebf4e79f140d743af0506e15dc160cf0
|
|
BLAKE2b-256 checksum How to use checksums |
1218dcaaf1b6987af05641b625ba3117f60ea88733f8304299e092951a862901
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/3.7.5
|
Security for mp-auth 0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.