Projet

Général

Profil

Bug #62900

gestion des personnes morales : par défaut ne pas renvoyer les claims relatives aux informations de compte standard si un profil PM est choisi par l’usager

Ajouté par Paul Marillonnet il y a environ 2 ans. Mis à jour il y a plus d'un an.

Statut:
Information nécessaire
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
17 mars 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Notamment dans le cas spécifique glcpro où les informations "couronne" (portée "crown") ne sont pas pertinentes pour une démarche PM et ne doivent donc pas être renvoyées.


Fichiers

Historique

#1

Mis à jour par Paul Marillonnet il y a environ 2 ans

Et les adaptations en front pour que l’usager comprenne que lorsqu’il sélectionne un profil PM ses informations personnelles ne sont pas transmises.
Ces adaptations pourraient consister en du JS qui met à jour en live la liste des claims transmises, ou bien simplement une seconde page dans le process d’autorisation, ou bien encore un texte explicatif sur la même page accompagné de la liste des claims qui ne seront pas transmises si l’usager sélectionne un profil PM.

#2

Mis à jour par Paul Marillonnet il y a environ 2 ans

Basé sur #62889.

#3

Mis à jour par Paul Marillonnet il y a environ 2 ans

  • Tags mis à personnes morales
#4

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

  • Assigné à mis à Paul Marillonnet
#5

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

Que je comprenne bien, le besoin ici en fait c'est que le code qui surcharge la création des user_info/id_token dans authentic2-glc ne renvoie pas les données couronnes lorsqu'un profil est sélectionné ? Ce ne sera pas plus simple de faire ça dans dans le hook correspondant que de déporter de la logique ici qui manipule les scopes ? À terme l'idéal serait de pouvoir se passer complètement du hook en ayant une configuration des claims/scopes plus complexe, en attendant je me dis qu'on préférera garder du code simple ici plutôt que d'avoir du code dans authentic écrit spécifiquement pour un usage externe.

PS: sachant qu'effectivement le système de profil interagit très mal avec les scopes, voir l'ignore complètement en fait.

#6

Mis à jour par Paul Marillonnet il y a environ 2 ans

  • Statut changé de Solution proposée à En cours

Benjamin Dauvergne a écrit :

Que je comprenne bien, le besoin ici en fait c'est que le code qui surcharge la création des user_info/id_token dans authentic2-glc ne renvoie pas les données couronnes lorsqu'un profil est sélectionné ?

Oui c’est bien ça.

Ce ne sera pas plus simple de faire ça dans dans le hook correspondant que de déporter de la logique ici qui manipule les scopes ?

Peut-être oui, je regarde.

À terme l'idéal serait de pouvoir se passer complètement du hook en ayant une configuration des claims/scopes plus complexe, en attendant je me dis qu'on préférera garder du code simple ici plutôt que d'avoir du code dans authentic écrit spécifiquement pour un usage externe.

PS: sachant qu'effectivement le système de profil interagit très mal avec les scopes, voir l'ignore complètement en fait.

Okay.

#7

Mis à jour par Paul Marillonnet il y a environ 2 ans

Une implémentation a2 mainline du hook, car il ne me semble pas que cette approche soit spécifique GL.

#8

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution proposée à Information nécessaire

Je ne comprends pas ce que fait ce code, si c'est le fonctionnement normal de l'idp oidc pas besoin d'un hook, autant mettre ça dans le code de génération des user_info/id_token. Et cette ligne particulièrement :

set(claim.get_scopes()) & extra_scopes and not set(claim.get_scopes()) & scope_set

Ça a l'air bien compliqué, le but semble être de retirer tout claim qui n'a pas été autorisé par un des claims "classiques/autorisés", openid, email et profile, dans ce cas autant faire cela:
# when profile is used, only keep generic claims linked to openid, email and profile scope (WHY???)
if profile:
   claim_removed = []
   for claim in OIDCClaim.objects.filter(client=client, name__in=user_info.keys()):
       if not (set(claim.get_scopes()) & {'openid', 'email', 'profile'} and claim.name in user_info:
           user_info.pop(claim.name)
           claim_removed.append(claim.name)
   if claim_removed:
       logger.info(....)

Formats disponibles : Atom PDF