Development #16842
Déléguer l'authentification des clients à authentic.
100%
Description
Permettre que fargo puisse s'appuyer sur authentic pour la vérification des identifiants des clients, par exemple les couples client_id et client_secret des clients OAUTH2.
Fichiers
Demandes liées
Révisions associées
api: use DRF for OAUTH2 APIs (#16842)
api: authenticate OAUTH2 clients through Authentic (fixes #16842)
Historique
Mis à jour par Mikaël Ates il y a presque 7 ans
- Lié à Development #16580: Ajouter une authentification pour DRF basée sur les client_id/client_secret des clients OIDC ajouté
Mis à jour par Mikaël Ates il y a presque 7 ans
- Lié à Development #16583: Ajouter une API check-password ajouté
Mis à jour par Josué Kouka il y a presque 7 ans
- Lié à Development #16192: ajouter dépôt de document en oauth2 ajouté
Mis à jour par Paul Marillonnet il y a plus de 6 ans
Est-ce qu'on encore ici des cas d'usages qui sortent du support OAuth2 dans Fargo ?
Mis à jour par Josué Kouka il y a environ 6 ans
- Fichier 0001-use-drf-for-oauth2-APIs-16842.patch 0001-use-drf-for-oauth2-APIs-16842.patch ajouté
- Fichier 0002-add-rp-remote-idp-authentication-16842.patch 0002-add-rp-remote-idp-authentication-16842.patch ajouté
- Patch proposed changé de Non à Oui
Je suis parti de l'idée d'avoir une seule classe drf pour l'authentification locale et distante. Du coup dans:
- le 0001 je change les vues
get_document_token
etput_document
en des vues drf. - le 002 je rajoute l'authentication distante.
Mis à jour par Josué Kouka il y a environ 6 ans
Paul Marillonnet a écrit :
Est-ce qu'on encore ici des cas d'usages qui sortent du support OAuth2 dans Fargo ?
Non, je ne pense pas.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Ça ne ressemble pas à ce qui est fait dans petale, il faut faire pareil, voir petale/authentication.py
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Notamment hériter de BasicAuthentication.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Et je découperai un peu plus, d'abord on bouge tout dans fargo/utils.py, ensuite on remplace les vues par des vues à base de classes, ensuite on vire authenticate_client() pour une classe d'authentification basée sur BasicAuthentication, ensuite on ajoute la délégation à authentic.
Mis à jour par Josué Kouka il y a environ 6 ans
- Fichier 0002-use-drf-for-oauth2-APIs-16842.patch 0002-use-drf-for-oauth2-APIs-16842.patch ajouté
- Fichier 0001-misc-move-some-util-functions-in-a-utils.py-file-168.patch 0001-misc-move-some-util-functions-in-a-utils.py-file-168.patch ajouté
- Fichier 0003-add-rp-remote-idp-authentication-16842.patch 0003-add-rp-remote-idp-authentication-16842.patch ajouté
Ça ne ressemble pas à ce qui est fait dans petale, il faut faire pareil, voir petale/authentication.py
Notamment hériter de BasicAuthentication.
OK c'est ce qui est fait en parti car le backend d'authentification diffère ici (OAUTH2Client)
Ok, dans le:Et je découperai un peu plus, d'abord on bouge tout dans fargo/utils.py, ensuite on remplace les vues par des vues à base de classes, ensuite on vire authenticate_client() pour une classe d'authentification basée sur BasicAuthentication, ensuite on ajoute la délégation à authentic.
- 0001: fonctions dans
utils.py
- 0002: passage à drf avec utilisation d'une classe d'authentication basée sur
BasicAuthentication
et suppression du deauthenticate_client
. Je n'ai pas splitter plus que ça parce que je me suis dit qu'avec l'introduction de l'APIView autant définir la classe d'authentification en meme temps. - 0003: ajout de l'authentification via l'idp.
Mis à jour par Frédéric Péters il y a environ 6 ans
0003: ajout de l'authentification via l'idp.
J'étais curieux sur cette API utilisée côté authentic j'ai regardé et il me semble qu'on a une exigence sur une permission particulière :
class CheckPasswordAPI(BaseRpcView): permission_classes = (DjangoPermission('custom_user.search_user'),) serializer_class = CheckPasswordSerializer
mais ici :
response = requests.post(url, json={ 'username': client_id, 'password': client_secret}, auth=(client_id, client_secret), verify=False)
l'appel se fait en http basic auth avec les identifiants de l'utilisateur qu'on veut checker, qui n'a sans doute pas custom_user.search_user.
(et verify=False…)
Ça a été testé en local avec un vrai authentic et autre chose qu'un compte admin ?
Mis à jour par Josué Kouka il y a environ 6 ans
Frédéric Péters a écrit :
0003: ajout de l'authentification via l'idp.
J'étais curieux sur cette API utilisée côté authentic j'ai regardé et il me semble qu'on a une exigence sur une permission particulière :
[...]
mais ici :
[...]
l'appel se fait en http basic auth avec les identifiants de l'utilisateur qu'on veut checker, qui n'a sans doute pas custom_user.search_user.
(et verify=False…)
Ça a été testé en local avec un vrai authentic et autre chose qu'un compte admin ?
Le droit d'accès à l'API pour les clients OIDC est défini au niveau du model avec has_api_access
.
Ensuite pour les permissions un (Fake User
) OIDCUser est renvoyé avec toutes les permissions accordées (tout est dans src/authentic/authentication
)
Mis à jour par Frédéric Péters il y a environ 6 ans
Ça a été testé en local avec un vrai authentic et autre chose qu'un compte admin ?
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
C'est moi qui ait dit des bêtises à Josué, il faut effectivement un compte particulier pour accéder à cette API, sur CUT/pétale j'utilise des credentials OIDC juste pour cela (sachant qu'on a une authentification pour les APIs basée dessus qui file toutes les permissions).
Donc Josué première remarque, faudrait un setting FARGO_AUTHENTIC_AUTH en plus du FARGO_AUTHENTIC_URL, idem voir petale.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
En fait je suis con, ça va fonctionner ce que fait Josué, d'ailleurs on s'est fait chier pour rien sur petale.
Mis à jour par Frédéric Péters il y a environ 6 ans
L'API check_password, elle est appelée ici comme pourrait être appelée une API ping qui ne ferait rien, la question du check des credentials étant déjà assurée avant, c'est bien ça ?
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Ici effectivement les mêmes credentials servent aux deux, mais l'API a bien un usage si je veux tester les identifiants d'un autre utilisateur qui lui n'a pas le droit d'accéder à cette API. Pour l'instant elle ne fait rien de très intéressant cette API à part dire oui ou non, mais on pourrait imaginer renvoyer un cookie de session à utiliser par une appli mobile.
Mis à jour par Josué Kouka il y a environ 6 ans
Frédéric Péters a écrit :
Ça a été testé en local avec un vrai authentic et autre chose qu'un compte admin ?
Oui oui.
Mis à jour par Josué Kouka il y a environ 6 ans
- Statut changé de En cours à Résolu (à déployer)
- % réalisé changé de 0 à 100
Appliqué par commit e22648dd3f34de04d1ace5e7928c00fbf646000d.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
- Statut changé de Résolu (à déployer) à Fermé
misc: move some util functions in a utils.py file (#16842)