Skip to main content

No project description provided

Project description

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]:
        remote_user = cognito_jwt["email"]
        user = super().authenticate(request, remote_user=remote_user, **kwargs)

        # Lets add the user to the group

        groups = cognito_jwt["custom:groups"]

        add_user_to_groups(user, group)
        return user

    def configure_user(  # type: ignore[override]
        self, request: HttpRequest, user: AbstractBaseUser
    ) -> AbstractBaseUser:
        """
        Configure a user after creation and return the updated user.
        By default, return the user unmodified.
        """
        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")),
]

Project details


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.0.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_cognito_saml-0.1.0.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.0 CPython/3.11.0 Darwin/21.3.0

File hashes

Hashes for django_cognito_saml-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b48a505918db3d31411c7350a6c574f91fd2e3813ee5523e105b53445e9cd4bb
MD5 10219f47b15601e1b398d37d67f11b35
BLAKE2b-256 2a32791d619b1b927f898bd379d7b759bfc69872046b727674338384c873b975

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for django_cognito_saml-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ffb89b4c71cf2ecc9740e9a5ce9f66f329aa66921a00038bcc93bb3c6ba1cec5
MD5 7c4f4e345360a8bbf70868d566c647f9
BLAKE2b-256 69b0d75bd604fa2129aeda3d4fbe5521ee53e8737ce52594ca0b0260899b12ea

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page