Skip to content

Bug - Génération de l'identifiant dans le provider OpenID Connect #137

@edelclaux

Description

@edelclaux

Lorsque l'on s'identifie via un provider openId, l'identifiant est généré à partir du prenom.nom

"identifiant": f"{user_info['given_name'].lower()}.{user_info['family_name'].lower()}",

source: https://github.com/PnX-SI/UsersHub-authentification-module/blob/42b69dbf82d820460071c734b6c2ba3bd78aac36/src/pypnusershub/auth/providers/openid_provider.py#L39C1-L39C100

Cette génération ne gère pas le cas des homonymes. En effet, si deux personnes portent le même nom prénom, ils auront le même identifiant.
C'est possible en base de données (la colonne identifiant n'a pas de contrainte d'unicité), et le compte openid est rattaché à un utilisateur en s'appuyant sur l'adresse mail.

Cependant, lors de l'authentification, on suppose l'unicité du champs identifiant.

user = db.session.execute(
    sa.select(models.User)
    .where(models.User.identifiant == username)
    .where(models.User.filter_by_app())
).scalar_one()

source: https://github.com/PnX-SI/UsersHub-authentification-module/blob/42b69dbf82d820460071c734b6c2ba3bd78aac36/src/pypnusershub/auth/providers/default.py#L33C1-L37C27

On a donc un problème manifeste.

A priori, utiliser l'identifiant pour s'identifier semble une bonne idée :)

Est-ce que ça vous semble ok de changer la manière dont la valeur de la colonne "identifiant" est générée ? L'utilisation telle qu'elle d'une valeur d'identifiant fournie par le provider me semble être plus à propos.

Je suppose qu'il y a plusieurs manière de gérer les comptes côté provider (mail, id, etc.), est-ce que ça vous semble ok de renseigner ce champs en config ?

# example
[[AUTHENTICATION.PROVIDERS]]
IDENTIFIANT_FIELD_NAME="upn" # ou preferred_username, ou autre

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions