Projet

Général

Profil

Bug #23900

idp oidc: restaurer la fourniture de preferred_username

Ajouté par Josué Kouka il y a presque 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Catégorie:
-
Version cible:
-
Début:
17 mai 2018
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Depuis #21870, preferred_username n'est plus fourni par défaut.


Fichiers


Demandes liées

Lié à Authentic 2 - Bug #23643: Crash connexion oidcFermé07 mai 2018

Actions

Révisions associées

Révision d4d4aa65 (diff)
Ajouté par Josué Kouka il y a plus de 5 ans

idp oidc: set user identifier as preferred username claim (#23900)

Historique

#1

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

  • Lié à Bug #23643: Crash connexion oidc ajouté
#2

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

Non, non, non le username n'est pas un email, à la base c'est un système qui permettait d'avoir 10 fois le même username en créant des realm, donc on pouvait se connecter avec too ou si on voulait être certain de ne pas avoir de collision avec (mais ce ne sont pas des email).

#3

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

Benjamin Dauvergne a écrit :

Non, non, non le username n'est pas un email, à la base c'est un système qui permettait d'avoir 10 fois le même username en créant des realm, donc on pouvait se connecter avec too ou si on voulait être certain de ne pas avoir de collision avec (mais ce ne sont pas des email).

Ok, peux etre que j'ai mal exposé le problème remonté par Fred dans #23643. Comment l'on fait pour revenir à ça

user_info['preferred_username'] = user.username.split('@', 1)[0]

#5

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

  • Statut changé de Nouveau à Rejeté

Benjamin Dauvergne a écrit :

On utiliser django_user_identifier voir http://git.entrouvert.org/authentic.git/tree/src/authentic2/attributes_ng/sources/django_user.py#n79

Ok neat !!

#6

Mis à jour par Frédéric Péters il y a presque 6 ans

  • Statut changé de Rejeté à En cours

Euh ?

Ce ticket rejeté mais ne pas avoir preferred_username positionné, alors que c'était le cas avant, c'est un vrai problème, ça fait crasher l'alfresco lors du SSO à Tournai.

#7

Mis à jour par Frédéric Péters il y a presque 6 ans

À noter l'intitulé à côté de la plaque du ticket; le soucis c'est qu'on avait avant preferred_username et qu'on ne l'a plus.

#8

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

  • Sujet changé de idp oidc: retourner juste le local-part lorsque le username est de type email. à idp oidc: restaurer la fourniture de preferred_username
  • Description mis à jour (diff)

Je modifie l'intitulé et la description, si c'est urgent pour Tournai la solution et de passer par la configuration manuelle et de remettre preferred_username avec comme source django_user_identifier.

#9

Mis à jour par Frédéric Péters il y a presque 6 ans

C'est (c'était) urgent pour Tournai (ça bloquait tout SSO vers Alfresco). (mais une fois trouvée l'origine du problème, j'ai contourné)

#10

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

Josué tu vois un moyen de restaurer la règle par défaut avec la configuration que je donne ? On les ajoute (les règles par défaut) à la création mais ici il faudrait une migration qui vérifie si les règles sont celles par défaut et si oui ajoute la règle manquante.

#11

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

Benjamin Dauvergne a écrit :

Josué tu vois un moyen de restaurer la règle par défaut avec la configuration que je donne ? On les ajoute (les règles par défaut) à la création mais ici il faudrait une migration qui vérifie si les règles sont celles par défaut et si oui ajoute la règle manquante.

Non, je ne pense pas. J'ai du mal à saisir ce que c'est qu'une regle. Est ce la configuration d'un claim ?

#12

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

Oui la configuration des claims OIDC, désolé de changer de terme. J'ai tendance à tout appeler règle du moment que ça parle d'attributs.

#13

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

Benjamin Dauvergne a écrit :

Oui la configuration des claims OIDC, désolé de changer de terme. J'ai tendance à tout appeler règle du moment que ça parle d'attributs.

Ok.

Josué tu vois un moyen de restaurer la règle par défaut avec la configuration que je donne ? On les ajoute (les règles par défaut) à la création mais ici il faudrait une migration qui vérifie si les règles sont celles par défaut et si oui ajoute la règle manquante.

Oui je vois.

#14

Mis à jour par Josué Kouka il y a plus de 5 ans

#15

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Je testerai les claim.name ainsi que les claim.value.

#17

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Je vois aucune changement dans la migrations:

        if DEFAULT_CLAIM_VALUES.symmetric_difference(claim_values):

C'est ça qu'il faut changer.

#19

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Presque...

OLD_DEFAULT_CLAIM_MAPPING = {

    'email': 'default_user_email', 
    'email_verified': 'django_user_email_verified',
    'family_name': 'django_user_last_name',
    'given_name': 'django_user_first_name',
    'preferred_username': 'django_user_username',
}
...
        claim_mapping = set(oidcclient.oidcclaim_set.values_list('name', 'value'))
        if set(OLD_DEFAULT_CLAIM_MAPPING.items()).symmetric_difference(claim_mapping):
...

Aussi tu as oublié de corriger la valeur par défaut dans l'admin (src/authentic2_idp_oidc/admin.py).

#20

Mis à jour par Josué Kouka il y a plus de 5 ans

Aussi tu as oublié de corriger la valeur par défaut dans l'admin (src/authentic2_idp_oidc/admin.py).

Ajouté.

#21

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée

Je trouve ça indélicatement formaté, ce n'est pas la première fois, c'est plus joli quand tout est aligné non ? En plus comme j'avais fait le boulot dans mon exemple...

OLD_DEFAULT_CLAIMS_MAPPING = {
    'email': 'django_user_email', 'email_verified': 'django_user_email_verified',
    'family_name': 'django_user_last_name', 'given_name': 'django_user_first_name',
    'preferred_username': 'django_user_username'
}

Je n'avais pas remarqué mais ça change quand même la sémantique par rapport à avant:

@@ -235,7 +238,7 @@ def test_authorization_code_sso(login_first, oidc_settings, oidc_client, simple_
     else:
         assert claims['acr'] == '1'
     assert claims['sub'] == make_sub(oidc_client, simple_user)
-    assert claims['preferred_username'] == simple_user.username
+    assert claims['preferred_username'] == ''
     assert claims['given_name'] == simple_user.first_name
     assert claims['family_name'] == simple_user.last_name
     assert claims['email'] == simple_user.email
@@ -244,7 +247,7 @@ def test_authorization_code_sso(login_first, oidc_settings, oidc_client, simple_
     user_info_url = make_url('oidc-user-info')
     response = app.get(user_info_url, headers=bearer_authentication_headers(access_token))
     assert response.json['sub'] == make_sub(oidc_client, simple_user)
-    assert response.json['preferred_username'] == simple_user.username
+    assert response.json['preferred_username'] == ''
     assert response.json['given_name'] == simple_user.first_name
     assert response.json['family_name'] == simple_user.last_name
     assert response.json['email'] == simple_user.email

Il y a un souci.

Il faut modifier la définition de django_user_identifier pour que ça colle avec la définition précédente de preferred_username:

+        if user.username:
+            user_info['preferred_username'] = user.username.split('@', 1)[0]

voir src/authentic2/attributes_ng/sources/django_user.py :

 77         splitted = user.username.rsplit('@', 1)
 78         ctx['django_user_domain'] = splitted[1] if '@' in user.username else ''
 79         ctx['django_user_identifier'] = splitted[0] if '@' in user.username else ''
#22

Mis à jour par Josué Kouka il y a plus de 5 ans

  • Statut changé de Solution validée à Solution proposée

Il y a un souci.
Il faut modifier la définition de django_user_identifier pour que ça colle avec la définition précédente de preferred_username

J'y ai pensé, mais puis je me suis dit que vu que preferred_username n'est en aucun cas un identifiant unique (doc oidc) j'ai pas fait la modification.
C'est fait dans ce patch.

#23

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Manque le patch.

#25

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée
#26

Mis à jour par Josué Kouka il y a plus de 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
  • % réalisé changé de 0 à 100
commit d4d4aa65c58d74c8832c57e0144d6766ab1044a2 (HEAD -> master, origin/master, origin/HEAD)
Author: Josue Kouka <jkouka@entrouvert.com>
Date:   Wed Aug 8 17:17:26 2018 +0200

    idp oidc: set user identifier as preferred username claim (#23900)
#27

Mis à jour par Frédéric Péters il y a plus de 5 ans

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

Formats disponibles : Atom PDF