Makina Blog
Configurer swagger avec un SSO sur une API Django
Lorsque l’on met en place de l’authentification OpenID Connect (OIDC) sur son API, souvent l’intégration avec swagger (via le package Python drf-spectacular) n’est pas réalisée. Cela veut dire que votre équipe de développement perd la capacité d’utiliser cette interface pour travailler et tester les requêtes API.
Dans cet article, je vous montre comment configurer le paquet Python drf-spectacular pour ajouter les jetons d’authentification *OIDC* sur les requêtes émises par swagger.
Attention, cet article ne couvre pas la mise en place d’une authentification OIDC sur votre API, pour ce sujet vous devriez regarder la librairie django_pyoidc.
Commencez par vous munir des identifiants du client OIDC qui va servir à générer des jetons. De mon côté, en général je mets en place deux clients OIDC sur mes projets Django avec une API :
- un client OIDC pour valider les jetons entrants
- un client OIDC pour faire de l’authentification sur le site d’administration
J’utilise le deuxième client OIDC côté swagger pour générer les jetons.
1 – Modification du fichier settings.py
Modifier le paramètre SPECTACULAR_SETTINGS comme suit :
SPECTACULAR_SETTINGS = {
"SWAGGER_UI_OAUTH2_CONFIG": {
"clientId": os.getenv("SSO_CLIENT_ID"), # à modifier
"clientSecret": os.getenv("SSO_CLIENT_SECRET"), # à modifier
"scopes": [], # optionnel, dépend de l'authentification que vous faîtes
},
}
2 – Ajout d’une vue pour enregistrer le jeton
Pour que swagger puisse enregistrer le jeton OIDC, il a besoin d’avoir une vue de callback.
Cette vue doit être déclarée dans votre fichier urls.py.
from drf_spectacular.views import (
SpectacularAPIView,
SpectacularSwaggerOauthRedirectView,
SpectacularSwaggerView,
)
urlpatterns += [
# Ces deux vues sont à configurer en regardant la doc de drf-spectacular
path("api/schema/", SpectacularAPIView.as_view(), name="schema"),
path(
"api/docs/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger-ui"
),
# Cette vue permet d'enregistrer le jeton OIDC côté navigateur
path(
"api/docs/oauth2-redirect.html", # Attention, cette vue doit être à côté de swagger-ui
CustomSpectacularView.as_view(),
name="swagger-ui-oauth",
)
]
3 – Utilisation
De retour sur la page d’accueil de votre swagger, un bouton authorize est disponible en haut à droite.
En cliquant dessus, la popup de connexion swagger s’ouvre. Faîtes-la défiler tout en haut, jusqu’à la section « openIdConnect (OAuth2, authorization_code) ».
Les paramètres client_id et client_secret sont déjà renseignés ! Faîtes défiler la popup vers le bas jusqu’à révéler le bouton Authorize qui vous redirigera vers le SSO pour vous connecter.
Vous pouvez désormais émettre des requêtes authentifiés avec OpenID Connect depuis votre documentation d’API swagger.
Formations associées
Formations Django
Formation Django REST Framework
Aucune session de formation n'est prévue pour le moment.
Pour plus d'informations, n'hésitez pas à nous contacter.
Voir la Formation Django REST FrameworkFormations Django
Formation Django avancé
Aucune session de formation n'est prévue pour le moment.
Pour plus d'informations, n'hésitez pas à nous contacter.
Voir la Formation Django avancéFormations Devops
Formation DevOps pour une équipe
Aucune session de formation n'est prévue pour le moment.
Pour plus d'informations, n'hésitez pas à nous contacter.
Voir la Formation DevOps pour une équipeActualités en lien
Mise en place d’une passerelle API entre Geotrek et Cirkwi
Django
21/05/2025
Bibliothèque d’authentification OpenID Connect Django
Django
08/04/2025
Administrer des comptes Keycloak depuis une application Python/Django
Django
18/11/2021
Dans cet article, nous allons créer une application Python/Django qui agira en tant que maître sur Keycloak afin de pouvoir ajouter facilement des comportements personnalisés à Keycloak.