Projet

Général

Profil

Development #66445

auth_oidc: le code de vérification des attributs requis est cassé si user_info ne contient pas exactement les mêmes attributs requis que l'idtoken

Ajouté par Benjamin Dauvergne il y a presque 2 ans. Mis à jour il y a presque 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
21 juin 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Le code se présente ainsi :

        for claim_mapping in provider.claim_mappings.all():
            claim = claim_mapping.claim
            if claim_mapping.required:
                if '{{' in claim or '{%' in claim:
                    logger.warning('claim \'%r\' is templated, it cannot be set as required')
                elif claim_mapping.idtoken_claim and claim not in id_token:
                    logger.warning(
                        'auth_oidc: cannot create user missing required claim %r in id_token (%r)',
                        claim,
                        id_token,
                    )
                    return None
                elif not user_info or claim not in user_info:
                    logger.warning(
                        'auth_oidc: cannot create user missing required claim %r in user_info (%r)',
                        claim,
                        user_info,
                    )
                    return None

Deux cas ou la dernière condition (elif not user_info...) sera levé alors qu'elle ne devrait pas :
  • si tous les mapping pointent vers l'idtoken alors user_info sera vide/None (car aucun mapping ne le réclamant il le user_info endpoint ne sera pas appelé), alors un claim bien présent dans l'idtoken finira par lever la dernière condition,
  • si un claim requis et présent dans l'idtoken n'est pas présent aussi dans la réponse du endpoint user_info

Pour corriger cela il faudrait revoir le code ainsi :

        for claim_mapping in provider.claim_mappings.all():
            claim = claim_mapping.claim
            if claim_mapping.required:
                if '{{' in claim or '{%' in claim:
                    logger.warning('claim \'%r\' is templated, it cannot be set as required')
                elif claim_mapping.idtoken_claim:
                    if claim not in id_token:
                        logger.warning(
                            'auth_oidc: cannot create user missing required claim %r in id_token (%r)',
                            claim,
                            id_token,
                        )
                        return None
                else: # user_info claim
                    if not user_info or claim not in user_info:
                        logger.warning(
                            'auth_oidc: cannot create user missing required claim %r in user_info (%r)',
                            claim,
                            user_info,
                        )
                        return None


Fichiers

Révisions associées

Révision c0a41644 (diff)
Ajouté par Benjamin Dauvergne il y a presque 2 ans

auth_oidc: check required claims only from the idtoken or the user_info endpoint not both (#66445)

Historique

#1

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

  • Assigné à mis à Benjamin Dauvergne
#2

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

#4

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

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

Yes complètement, bien vu.

#5

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit c0a41644a1ba7e893bc91b5afda806ac9159dcf9
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Jun 21 13:41:58 2022 +0200

    auth_oidc: check required claims only from the idtoken or the user_info endpoint not both (#66445)
#6

Mis à jour par Transition automatique il y a presque 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#7

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF