Skip to main content

django-cognito-saml

Library to implement django authentication using cognito (via pyjwt).

Assumptions made:

  • Using authorization code flow. Implicit grant is insecure as the access token is transferred over in the request parameters without encryption.

Settings

Setting Description
COGNITO_ENDPOINT Either the hosted domain or custom domain for your cognito app
COGNITO_CLIENT_ID CLIENT_ID of your application in your user pool
COGNITO_CLIENT_SECRET CLIENT_SECRET of your application in your user pool
COGNITO_JWKS_URI The JWKS URI of your user pool. Used to verify the JWT.
COGNITO_REDIRECT_URI OPTIONAL It is possible to share one cognito app with multiple websites via a proxy.
COGNITO_RESPONSE_HOOK OPTIONAL Post authentication hook to modify the response (perhaps to add headers). Specify it as a django import_string.

Installation

  1. Add the above settings to your settings.
COGNITO_ENDPOINT = "..."
COGNITO_CLIENT_ID = "..."
COGNITO_CLIENT_SECRET = "..."
COGNITO_JWKS_URI = "..."
COGNITO_REDIRECT_URI = "..."
COGNITO_RESPONSE_HOOK = ""
  1. Define your authentication backend. Subclass off django_cognito_saml.backends.CognitoUserBackend. A custom backend is where you add users to groups and / or do something custom. Set create_unknown_user = False if we want only pre-created users to be used.
class CustomCognitoBackend(CognitoUserBackend):
    # Change this to False if you do not want to create a remote user.
    create_unknown_user = True

    def authenticate(  # type: ignore[override]
        self, request: HttpRequest, cognito_jwt: dict[str, Any], **kwargs: Any
    ) -> Optional[AbstractBaseUser]:
        # Customizing the username field used to create the user
        remote_user = cognito_jwt["username"]
        user = super().authenticate(request, remote_user=remote_user, **kwargs)
        return user

    def configure_user(  # type: ignore[override]
        self, request: HttpRequest, user: AbstractBaseUser, created: bool = True
    ) -> AbstractBaseUser:
        # Configuring the user post login
        if created:
            user.name = self.cognito_jwt["name"]
            user.save()
        return user
  1. Add CustomCognitoBackend to your authentication backends. Alternatively; If you wish to modify the authentication logic (ie: Adding permissions)<>
AUTHENTICATION_BACKENDS = (
    ...
    "apps.backends.CustomCognitoBackend",
    ...
)
  1. Add the cognito saml urls to your urls.py
urls = [
    ...
    path("/", include("django_cognito_saml.urls")),
]

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_cognito_saml-0.1.1.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_cognito_saml-0.1.1-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file django_cognito_saml-0.1.1.tar.gz.

File metadata

  • Download URL: django_cognito_saml-0.1.1.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.9.16 Linux/5.15.0-1034-azure

File hashes

Hashes for django_cognito_saml-0.1.1.tar.gz
Algorithm Hash digest
SHA256 14a2a75185f5d5d5baf2deba9747361600bcb87940b34be1b2f127c512d2d598
MD5 efad13e0b27aef18a79691325c83f30a
BLAKE2b-256 67648e3389eb964f097b96846c1f79cc606341d467ceaa18889fe261c34fad1f

See more details on using hashes here.

File details

Details for the file django_cognito_saml-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: django_cognito_saml-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.9.16 Linux/5.15.0-1034-azure

File hashes

Hashes for django_cognito_saml-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9fc03bcdf71e01f1da3473e8db1aac768fe9928f8280f8308c3f5a25113bc2b0
MD5 ae473f3421acc30f45fdb98e3e20dc07
BLAKE2b-256 095bb7bd2e21c9876d6939d2ba10b2d938a8ea6468cc47f582871610e200b8f9

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page