Projet

Général

Profil

Development #16842

Déléguer l'authentification des clients à authentic.

Ajouté par Mikaël Ates il y a presque 7 ans. Mis à jour il y a environ 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Version cible:
-
Début:
12 juin 2017
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Lié à Authentic 2 - Development #16580: Ajouter une authentification pour DRF basée sur les client_id/client_secret des clients OIDCFermé29 mai 2017

Actions
Lié à Authentic 2 - Development #16583: Ajouter une API check-passwordFermé29 mai 2017

Actions
Lié à Fargo - Development #16192: ajouter dépôt de document en oauth2Fermé05 mai 2017

Actions

Révisions associées

Révision 94dab06b (diff)
Ajouté par Josué Kouka il y a environ 6 ans

misc: move some util functions in a utils.py file (#16842)

Révision 85ebba83 (diff)
Ajouté par Josué Kouka il y a environ 6 ans

api: use DRF for OAUTH2 APIs (#16842)

Révision e22648dd (diff)
Ajouté par Josué Kouka il y a environ 6 ans

api: authenticate OAUTH2 clients through Authentic (fixes #16842)

Historique

#2

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é
#3

Mis à jour par Mikaël Ates il y a presque 7 ans

#4

Mis à jour par Josué Kouka il y a presque 7 ans

#5

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 ?

#6

Mis à jour par Josué Kouka il y a environ 6 ans

Voila, un patch.
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 et put_document en des vues drf.
  • le 002 je rajoute l'authentication distante.
#7

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.

#8

Mis à jour par Josué Kouka il y a environ 6 ans

  • Statut changé de Nouveau à En cours
#9

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

#10

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Notamment hériter de BasicAuthentication.

#11

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.

#12

Mis à jour par Josué Kouka il y a environ 6 ans

Ç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)

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.

Ok, dans le:
  • 0001: fonctions dans utils.py
  • 0002: passage à drf avec utilisation d'une classe d'authentication basée sur BasicAuthentication et suppression du de authenticate_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.
#13

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Je vais relire ça ce soir.

#14

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 ?

#15

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)

#16

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 ?

#17

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.

#18

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.

#19

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 ?

#20

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.

#21

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.

#22

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
#23

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF