Projet

Général

Profil

Bug #29009

OIDC: l'authentification OIDC ne conserve pas le nonce dans l'evènement d'authentification

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
14 décembre 2018
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

La conservation du nonce est nécessaire pour le bon suivi d'une authentification forcé (forceAuthn utilisé avec SSO SAML par exemple).


Fichiers

Révisions associées

Révision b4110b3b (diff)
Ajouté par Benjamin Dauvergne il y a plus de 5 ans

auth_oidc: verify and store id_token nonce (fixes #29009)

Historique

#1

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

  • Patch proposed changé de Non à Oui
#2

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

Voilà le nonce est bien threadé à travers toute l'authentification pour finir
en session dans le tableau des évènements d'authentification, SAML sera
content.

#3

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

Les nonces sont utilisés dans a2 pour s'assurer qu'une réponse à une requête de SSO a bien donné lieu à une authentification, seul moyen de forcer une réauthentification.

En SAML on reprend l'ID unique du message de SSO qu'on passe à la vue /login/ dans le paramètre nonce, si on choisit l'authentification OIDC, ce nonce est passé ensuite à /accounts/oidc/login/, qui s'en sert pour le nonce du protocole OIDC.

Le nonce dans le protocole OIDC est une valeur unique passé dans la requête d'authentification OIDC et retournée uniquement dans l'id token, elle permet comme dans A2 de faire le lien entre une réponse et une requête.

#4

Mis à jour par Thomas Noël il y a plus de 5 ans

Dans src/authentic2_auth_oidc/views.py, ces deux lignes :

            ...
            oidc_request = oidc_state.get('request')
            nonce = oidc_request.get('nonce')
            ...

je les mettrais pas dans le try/except lié à get_provider_by_issuer, plutôt après.

Et sur la première ligne, plutôt faire un « oidc_request = oidc_state.get('request') or {} », au cas où.

Voilà, c'est tout ce que j'ai a dire, en vérité l'objet du patch m'échappe un peu.

#6

Mis à jour par Thomas Noël il y a plus de 5 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#8

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

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

Formats disponibles : Atom PDF