Django: acesso OpenID Connect com mozilla-django-oidc
Início de sessão com o Dazr Identity: OpenID Connect gratuito, alojado na UE, com passkeys, códigos por e-mail e contas Google ou Microsoft atrás de um só botão.
Precisa de três valores da consola para programadores: o ID de cliente, o segredo de cliente (apenas aplicações de servidor web) e o URI de redirecionamento que registou. O resto está no documento de descoberta em https://identity.dazr.eu/.well-known/openid-configuration.
Django
Use o mozilla-django-oidc. Registe uma aplicação de servidor web com o URI de redirecionamento https://app.example.eu/oidc/callback/. A biblioteca não lê o documento de descoberta, por isso os endpoints estão escritos por extenso.
# settings.py
import os
INSTALLED_APPS += ["mozilla_django_oidc"] # after django.contrib.auth
AUTHENTICATION_BACKENDS = [
"mozilla_django_oidc.auth.OIDCAuthenticationBackend",
"django.contrib.auth.backends.ModelBackend",
]
OIDC_RP_CLIENT_ID = os.environ["DAZR_CLIENT_ID"]
OIDC_RP_CLIENT_SECRET = os.environ["DAZR_CLIENT_SECRET"]
OIDC_RP_SCOPES = "openid profile email"
OIDC_RP_SIGN_ALGO = "ES256"
OIDC_OP_JWKS_ENDPOINT = "https://identity.dazr.eu/oauth/jwks"
OIDC_OP_AUTHORIZATION_ENDPOINT = "https://identity.dazr.eu/oauth/authorize"
OIDC_OP_TOKEN_ENDPOINT = "https://identity.dazr.eu/oauth/token"
OIDC_OP_USER_ENDPOINT = "https://identity.dazr.eu/oauth/userinfo"
OIDC_USE_PKCE = True
OIDC_PKCE_CODE_CHALLENGE_METHOD = "S256"
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/"
# urls.py
from django.urls import include, path
urlpatterns += [path("oidc/", include("mozilla_django_oidc.urls"))]
# template: start the sign-in
# <a href="{% url 'oidc_authentication_init' %}">Sign in with Dazr Identity</a>
Por defeito, o backend associa os utilizadores pelo e-mail. Para associar as contas ao sub, crie uma subclasse de OIDCAuthenticationBackend e substitua filter_users_by_claims e create_user. Use uma versão atual: as versões antigas não conseguem verificar assinaturas ES256.
sub é pairwise: igual para todas as aplicações da sua organização, diferente para qualquer outra organização. Nunca muda para uma pessoa, ao passo que um endereço de e-mail pode mudar. Guarde sub como chave da conta e trate email como dado de contacto.
Mais para programadores
Documentação para programadoresTodos os guias de integraçãoQualquer biblioteca OpenID ConnectPreços