Skip to main content

Custom Microsoft Entra ID Authentication Backend for Django.

Project description

django-epfl-entra-id

Test Status Coverage Status PyPI version

Custom Microsoft Entra ID Authentication Backend for Django.

Requirements

  • Python 3.6 or later
  • Django 1.11, 2.2, 3.2, 4.2 or 5.2

Installation

pip install django-epfl-entra-id

Documentation

Settings

Add mozilla_django_oidc to INSTALLED_APPS:

INSTALLED_APPS = [
  ...
  "django.contrib.auth",
  "mozilla_django_oidc",  # Load after auth
  ...
]

Add django_epfl_entra_id authentication backend:

AUTHENTICATION_BACKENDS = ("django_epfl_entra_id.auth.EPFLOIDCAB",)

Register your application in the App Portal and add the OIDC configuration:

TENANT_ID = os.environ["TENANT_ID"]

OIDC_RP_CLIENT_ID = os.environ["OIDC_RP_CLIENT_ID"]
OIDC_RP_CLIENT_SECRET = os.environ["OIDC_RP_CLIENT_SECRET"]

AUTH_DOMAIN = f"https://login.microsoftonline.com/{TENANT_ID}"
OIDC_OP_AUTHORIZATION_ENDPOINT = f"{AUTH_DOMAIN}/oauth2/v2.0/authorize"
OIDC_OP_TOKEN_ENDPOINT = f"{AUTH_DOMAIN}/oauth2/v2.0/token"
OIDC_OP_JWKS_ENDPOINT = f"{AUTH_DOMAIN}/discovery/v2.0/keys"
OIDC_OP_USER_ENDPOINT = "https://graph.microsoft.com/oidc/userinfo"
OIDC_RP_SIGN_ALGO = "RS256"

LOGIN_URL = "/auth/authenticate"
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/"

Routing

Edit your urls.py and add the following:

urlpatterns = [
  ...
  path("", include("django_epfl_entra_id.urls")),
  path("auth/", include("mozilla_django_oidc.urls")),
  ...
]

Example template:

{% if user.is_authenticated %}
  <p>Current user: {{ user.username }}</p>
  <form action="{% url 'oidc_logout' %}" method="post">
    {% csrf_token %}
    <input type="submit" value="logout">
  </form>
{% else %}
  <a href="{% url 'oidc_authentication_init' %}?next={{ request.path }}">
    Login
  </a>
{% endif %}

Optional configuration

AUTH_PROFILE_MODULE = "userprofile.UserProfile"

Logging

Enable these loggers in settings to see logging messages to help you debug:

LOGGING = {
  ...
  "loggers": {
      "mozilla_django_oidc": {
        "handlers": ["console"], 
        "level": "DEBUG"
      },
      "django_epfl_entra_id": {
        "handlers": ["console"],
        "level": "DEBUG",
      },
  ...
}

Make sure to use the appropriate handler for your app.

Download files

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

Source Distribution

django_epfl_entra_id-0.0.8.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

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

django_epfl_entra_id-0.0.8-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file django_epfl_entra_id-0.0.8.tar.gz.

File metadata

  • Download URL: django_epfl_entra_id-0.0.8.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for django_epfl_entra_id-0.0.8.tar.gz
Algorithm Hash digest
SHA256 debe124ea397d9890ca24fea3f42db9185087ff5c2dd3e056ec2f72c545f6f50
MD5 86e9581c2808fd7b3eca982b8a96d484
BLAKE2b-256 b31a4fd06d5e37d1e285c0047cd7173fcf6126d77fa9b262cf969d5ad706e9e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_epfl_entra_id-0.0.8.tar.gz:

Publisher: release.yml on epfl-si/django-epfl-entra-id

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_epfl_entra_id-0.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for django_epfl_entra_id-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 3074654fbd9996af76c39fc979ec2688ee288f51ad51eb613d47d0b7c6cf2b58
MD5 b72758d1fdefeb4498c442e1555dc420
BLAKE2b-256 9d0c613a3ae7d76737168e6dbc25022941a29d562aa7883cb76479afcf16c32b

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_epfl_entra_id-0.0.8-py3-none-any.whl:

Publisher: release.yml on epfl-si/django-epfl-entra-id

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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