OIDC avec Grist

J’héberge plusieurs Grist avec Keycloak avec le CHATONS RésiLien, mais je viens de remarquer que si je change le mail d’un utilisateur, Grist crée un nouveau utilisateur :scream:

C’est un comportement que j’étais loin d’imaginer… j’ai un username qui lui ne change pas ou encore le sub qui est un id d’utilisateur mais faire le lien avec l’email je trouve ça pas terrible.

J’ai bien vu que l’on peut changer ça avec GRIST_OIDC_SP_PROFILE_EMAIL_ATTR ou peut être que la fonctionnalité SCIM peut résoudre ceci.

Comment faites vous ?

Je ferai des tests la dessus lundi mais si jamais vous avez des bonnes pratiques je suis preneur :wink:

Bonjour et bienvenue sur le forum :slight_smile: je ping le spécialiste de la question @florent.fayolle qui pourra peut-être vous aider !

Bonjour @kosssi,

Ah, les subs OIDC… Une arlésienne chez nous :grimacing: .

Ça fait longtemps qu’on souhaite l’implémenter, chaque fois il y a de la douleur à faire sans.

Donc oui :

mais je viens de remarquer que si je change le mail d’un utilisateur, Grist crée un nouveau utilisateur :scream:

C’est tout à fait vrai.

C’est un comportement que j’étais loin d’imaginer… j’ai un username qui lui ne change pas ou encore le sub qui est un id d’utilisateur mais faire le lien avec l’email je trouve ça pas terrible.

C’est douloureux mais c’est vrai :grimacing:

J’ai bien vu que l’on peut changer ça avec GRIST_OIDC_SP_PROFILE_EMAIL_ATTR

Je vois pas trop comment, c’est une variable d’environnement pour dire où trouver l’email dans la réponse de l’OIDC. Généralement on n’a pas trop à bidouiller dessus.

ou peut être que la fonctionnalité SCIM peut résoudre ceci.

Comment faites vous ?

Alors l’idéal, c’est de faire une modification en base de données et le faire avant qu’un·e utilisateur·rice se connecte avec son nouvel email.

:warning: FAIRE UNE SAUVEGARDE DE LA BASE AVANT CE QUI SUIT :warning:

Si le nouveau compte est créé mais qu’il est resté vide (pas invité à des espaces), il reste toujours possible de supprimer ce nouveau compte par SCIM (POST /api/scim/v2/Users/.search pour chercher l’ID du compte puis DELETE /api/scim/v2/Users/{userId} pour le supprimer, cf documentation) et faire l’opération en base ensuite.

L’opération en base consiste à lancer la requête SQL suivante :

UPDATE logins SET email='nouvel_email@example.com', display_email='nouvel_email@example.com' WHERE email='ancien_email@example.com';

Vous pouvez ensuite demander au nouvel utilisateur de se connecter, ça devrait être tout bon.

À noter qu’ensuite, il y a l’email à modifier à la main dans les permissions avancées des documents si l’appairage se fait par l’email.

J’ai commencé à coder un micro web service qui va me faire ça automatiquement parce que je ne peux pas être derrière chaque utilisateur et pour moi le changement de mail est une fonctionnalité de base que je ne peux pas bloqué.

Le portail ou les utilisateurs peuvent changer de mail ira directement faire ce changement. Je publierai le code :wink:

1 « J'aime »