Pirates
Django app na uživatele, týmy a skupiny, s napojením na SSO.
Bezheslová SSO autentizace (OpenID Connect) a abstraktní modely uživatele, týmu a skupiny pro Django.
Požadavky
- Python 3.11+
- Django 5.2–6.x
Instalace
pip install pirates-auth
Na PyPI se balíček jmenuje pirates-auth, ale importuje se jako pirates –
pod tímto názvem se také přidává do INSTALLED_APPS.
Použití
Settings
Přidat pirates do INSTALLED_APPS.
Modely
Jsou k dipozici abstraktní modely pro uživatele, tým a organizační skupinu. Ty lze doplnit o další fieldy specifické pro aplikaci. Příklad:
from django.db import models
from pirates.models import AbstractUser
class CustomUser(AbstractUser):
is_friendly = models.BooleanField(default=True)
A nezapomenout model pro uživatele nastavit v settings:
AUTH_USER_MODEL = "myapp.CustomUser"
Uživatel je bezheslový – autentizuje se přes SSO (OpenID Connect), takže
AbstractUser nedědí z AbstractBaseUser a nemá pole password ani
last_login. get_session_auth_hash() je proto odvozen z sso_id, aby
django.contrib.auth.login() fungoval i na Djangu 6+.
URLs
URL patterns (v současné době pouze pro OpenID Connect) jsou definovány v
pirates.urls. Stačí je připojit k URL patterns projektu:
from pirates.urls import urlpatterns as pirates_urlpatterns
urlpatterns = [
# URL patterns projektu
# ...
] + pirates_urlpatterns
SSO přes OpenID Connect
Implementaci OpenID zajišťuje knihovna mozilla-django-oidc.
V settings projektu je třeba nastavit několik konfiguračních konstant a autentifikační backend. Příklad settings (s využitím django-environ):
from os.path import join
import environ
env = environ.Env()
AUTHENTICATION_BACKENDS = ["pirates.auth.PiratesOIDCAuthenticationBackend"]
OIDC_RP_CLIENT_ID = env.str("OIDC_RP_CLIENT_ID")
OIDC_RP_CLIENT_SECRET = env.str("OIDC_RP_CLIENT_SECRET")
OIDC_RP_REALM_URL = env.str("OIDC_RP_REALM_URL")
OIDC_RP_SIGN_ALGO = "RS256"
OIDC_OP_JWKS_ENDPOINT = join(OIDC_RP_REALM_URL, "protocol/openid-connect/certs")
OIDC_OP_AUTHORIZATION_ENDPOINT = join(OIDC_RP_REALM_URL, "protocol/openid-connect/auth")
OIDC_OP_TOKEN_ENDPOINT = join(OIDC_RP_REALM_URL, "protocol/openid-connect/token")
OIDC_OP_USER_ENDPOINT = join(OIDC_RP_REALM_URL, "protocol/openid-connect/userinfo")
URL patterns pro OpenID Connect už jsou součástí pirates.urls (viz výše).
Signál po přihlášení
Po přihlášení uživatele je poslán signál pirates.signals.post_login s
parametry:
sender-PiratesOIDCAuthenticationBackenduser- přihlášený uživatel (instanceAUTH_USER_MODEL)created-True/Falsezda-li byl vytvořen nový uživatelrequest- instanceHttpRequest
Metadata
Release files for pirates-auth 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pirates_auth-0.8.0.tar.gz | 5.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pirates_auth-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.4 kB
Release files / pirates_auth-0.8.0.tar.gz
| Download URL | pirates_auth-0.8.0.tar.gz |
|---|---|
| Size | 5.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8c46ba25ac00252500bad758ea6d292cdaca16ec4b4acd663a704a5eae5e94a2
|
|
BLAKE2b-256 checksum How to use checksums |
1a4767f48a78685af5ea094180b5e842ed30b3a7e16093a988b8e6f20714d34a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.4.1 CPython/3.13.13 Linux/7.1.1
|
Release files / pirates_auth-0.8.0-py3-none-any.whl
| Download URL | pirates_auth-0.8.0-py3-none-any.whl |
|---|---|
| Size | 6.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bcb30695d78f6978c2f2934ca961be9082a91059fbe05ba1fd98d69f98b2b743
|
|
BLAKE2b-256 checksum How to use checksums |
3799aa3dfae85e83d8ad5ae0d281e991fc82a9e843f65401792d376c83d4d9af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.4.1 CPython/3.13.13 Linux/7.1.1
|