Authentification de secours

Principes

Page de saisie de question-réponse pour authentification de secours

Lors de la première connexion, c'est-à-dire lorsque précisément aucun enregistrement d’authentification de secours n’existe pour l’utilisateur, proposer à l’utilisateur une question relative à : ses souvenirs d’enfance, l’état civil de ses proches, ses préférences et un champ de réponse stocké dans la base de données Annuaire.

Page d’authentification de secours par question / réponse

En cas d’erreur d’authentification (oubli du mot de passe), proposer à l’utilisateur une série de questions incluant celle à laquelle il avait répondu, et saisir sa réponse. La validation de la réponse entraîne la saisie d’un nouveau mot de passe. Une fois cette opération effectuée, la personne est considérée comme authentifiée. En cas d’échec, réponse non valide, l’utilisateur est conduit à contacter un service qui pourra lui attribuer un nouveau mot de passe.

Principales difficultés

La réponse doit pouvoir être vérifiée, donc être assez simple, ce qui conduit à certaines règles :

  • si la réponse est alphabétique, supprimer tous accents et séparateurs
  • si elle est numérique, ne garder que les chiffres
Le type de réponse doit être associé à chaque question. Les questions doivent être prévues pour obtenir des réponses non ambiguës.

La question doit être conservée telle qu’elle a été posée, même si elle n’est plus d’actualité (si elle n’est plus proposée aux nouveaux utilisateurs). Cela implique que les questions soient toutes conservées, avec un témoin de validité.

Quand on propose la liste des questions, pour mettre en place l’authentification de secours, il faut proposer l’ensemble des questions valides, triées par ordre d’affichage.

Quand on propose la liste des questions, pour vérifier et utiliser l’authentification de secours, il faut proposer l’ensemble des questions valides, plus la question enregistrée pour l’utilisateur si elle n’est plus d’actualité, triées par ordre d’affichage.

Enregistrement des informations relatives à l’authentification de secours

L’ensemble des informations nécessaires à l’authentification de secours sont stockées dans des tables relationnelles complémentaires à l’annuaire.

Tables complémentaires à l’annuaire pour authentification de secours

Authentification

Informations nécessaires :

  • identifiant = uid crypté (en fait il s'agit du DN crypté).
  • mot de passe (en clair) (en cas de perte et d’identification par question-réponse, il est remplacé par un nouveau).
  • un code question servant à l'authentification de secours.
  • une réponse correspondante servant à l'authentification de secours.
  • date de dernière connexion.
  • date de la prochaine relance (dépend de la date de dernière connexion et de la date de fin d'absence normale du bureau).
Structure de la table AUTHENTIFICATION (Oracle):
UID_ CRYPTE		VARCHAR2(255)		NOT NULL,
MOT_DE_PASSE		VARCHAR2(255)		NOT NULL,
CODE_QUESTION_1		NUMBER(3),
REPONSE_QUESTION_1	VARCHAR2(255),
DERNIERE_CONNEXION	DATE,
DATE_RELANCE		DATE

Questions pour authentification de secours

Données nécessaires:

  • code question
  • fin de validité de la question
  • texte question
  • type de réponse attendue (alphanumérique ou numérique)
Structure de la table QUESTION (Oracle):
CODE_QUESTION			NUMBER(3)		NOT NULL,
FIN_VALIDITE			DATE				,
ORDRE_AFFICHAGE			NUMBER			NOT NULL,
TYPE_REPONSE			VARCHAR(1)		NOT NULL,
QUESTION			VARCHAR2(255)		NOT NULL

Contenu de la table des questions pour authentification de secours

Un « premier jet » de la table des questions pourrait être :

Code_questionFin_validiteOrdre_affichageType_reponseQuestion
1 1AQuel a été votre premier livre ?
2 2AQuel était votre surnom enfantin ou celui de l'un de vos proches ?
3 3AQuel a été votre premier voyage ?
4 4AQuel est votre morceau de musique préféré ?
5 5AQuelle est votre boisson préférée ?
6 6AQuelle est votre fleur préférée ?
7 7AQuelle est votre couleur préférée ?
8 8AQuel est votre animal préféré ?
9 9NQuel est votre nombre préféré ?
10 10AQuel est le prénom de votre Grand-mère maternelle ?
11 11AQuel est le prénom de votre Grand-mère paternelle ?
12 12AQuel est le prénom de votre Grand-père paternel ?
13 13AQuel est le prénom de votre Grand-père maternel ?

Algorithmes authentification de secours

À toute authentification voir si c’est la première connexion à l’annuaire

Pour cela :

  • Crypter le DN de la personne selon l’algorithme ad hoc, soit wdn_crypte
  • Rechercher l’authentification de secours de la personne dans la table authentification :
Requête renseigner_authentification_secours:
Select
    CODE_QUESTION_1 
from
    ANNUAIRE6.AUTHENTIFICATION 
where
    UID_CRYPTE = :wdn_crypte

Si cette requête ramène quelque chose, terminé, ce n’est pas la première authentification. Sinon, passer à la saisie des informations pour l’authentification de secours.

NB : première connexion et première re-connexion : au cas où le mot de passe de quelqu’un est modifié (forcé) par quelqu’un d’autre que lui-même, il faudrait supprimer les informations question et réponse de l’authentification de secours, qui ont manifestement été inutiles, de façon à ce qu’à sa première re-connexion l’utilisateur remette en place une authentification de secours. Voir si ce « post-traitement » sur le mot de passe est possible : en cas de modification du mot de passe par un acteur différent de la cible, update à « null » de code_question_1 et reponse_question_1.

Saisie des informations pour l’authentification de secours

Affichage première page de saisie
  • Titre de la page : « Question-réponse pour établir une authentification de secours ».
  • Un premier paragraphe est un avertissement en texte fixe :
La saisie qui suit est uniquement destinée à permettre de vous authentifier en cas de perte de votre mot de passe.

Vous devez choisir une question dont vous êtes a priori seul(e) à connaître la réponse. Par exemple, ne choisissez pas la question « quel est votre animal préféré ?» si le mur de votre bureau est couvert de photos de votre chat, ou si vous travaillez avec votre singe sur l’épaule. Ne choisissez pas « quel est le prénom de votre grand’père paternel » si vous êtes la petite-fille ou le petit-fils d’Einstein.

Vous devez choisir une question de façon suffisamment spontanée pour savoir la reconnaître aisément dans une liste.

Votre réponse doit être la plus concise possible et, tant que faire se peut, en un seul mot.

Votre choix de question et votre réponse sont entièrement personnels et confidentiels, de la même façon que votre mot de passe.

  • Champs de saisie :
Choisissez une question : liste déroulante affichant l’ensemble des questions valides dans l’ordre d’affichage.

La liste s’obtient par la requête liste_question_saisie_authentification_secours :

Select 
    CODE_QUESTION, 
    QUESTION 
from 
    ANNUAIRE6.QUESTION 
where 
    nvl(FIN_VALIDITE, sysdate+1) > sysdate 
order by 
    ORDRE_AFFICHAGE, 
    nvl(FIN_VALIDITE, sysdate)

(seul le champ QUESTION est affiché dans la liste déroulante, la sélection de l’utilisateur donne le CODE_QUESTION correspondant comme résultat, soit wcode_question).

Votre réponse : champ de saisie de wreponse.

Bouton VALIDER (rouge encadré « habituel »)

À la validation :

Récupérer le type de la réponse correspondant à la question choisie :

Requête type_reponse_authentification_secours

Select 
    TYPE_REPONSE 
from 
    ANNUAIRE6.QUESTION 
where 
    CODE_QUESTION = :wcode_question

Supprimer accents, espaces et caractères spéciaux dans la réponse wreponse. Vérifier que la réponse correspond au type : alphanumérique pour type « A », numérique pour type « N ».

Si la réponse ne correspond pas au type attendu

Afficher le message d’erreur correspondant :

Votre réponse doit être un nombre pour le cas « N »
Votre réponse ne doit contenir que des lettres et des chiffres pour le cas « A »

Et rester sur la page.

Si la réponse est correcte

Enregistrer question et réponse.

Requête mise_a_jour_authentification_secours :

Update 
    ANNUAIRE6.AUTHENTIFICATION
Set 
    CODE_QUESTION_1 = :wcode_question,
    REPONSE_QUESTION_1 = :wreponse 
where 
    UID_CRYPTE = :wdn_crypte

Syntaxe à revoir

Et passer à la saisie d’un nouveau mot de passe décrite ci-dessous

Saisie d’un nouveau mot de passe
Affichage d’une page de saisie du mot de passe
  • Titre de la page : « Saisie d’un nouveau mot de passe »
Un premier paragraphe est un avertissement en texte fixe : Reprise du contenu de la page d’aide sur le mot de passe
  • Champs de saisie :
Votre mot de passe : 				 champ de saisie masquée
Indiquez une deuxième fois votre mot de passe :  champ de saisie masquée

Bouton VALIDER (rouge encadré « habituel »)

NB : Faire attention à ce que les mots de passe en clair et même cryptés n’apparaissent pas dans les sources html.

À la validation du mot de passe

Faire le même traitement que dans « Mon profil » : enregistrer le mot de passe en clair dans la table authentification et le mot de passe crypté dans l’annuaire.

Faire le traitement standard post-authentification (ouverture de session, etc…)

À tout clic sur le lien « oubli de mot de passe », utilisation de l’authentification de secours
Lien « oubli de mot de passe »

Le lien « vous avez oublié votre mot de passe » apparaît en cas d’authentification incorrecte.

Affichage première page de saisie
  • Titre de la page : « Authentification de secours ».
  • Champs de saisie :
Indiquez la question que vous aviez choisie : liste déroulante affichant l’ensemble des questions valides + celle de l’utilisateur dans l’ordre d’affichage

La liste s’obtient par la requête liste_question_utilisation_authentification_secours :

Select 
    CODE_QUESTION, 
    QUESTION 
from 
    ANNUAIRE6.QUESTION 
where 
    nvl(FIN_VALIDITE, sysdate+1) > sysdate 
    or CODE_QUESTION in 
        (Select 
            CODE_QUESTION_1 
        from 
            ANNUAIRE6.AUTHENTIFICATION 
        where 
            UID_CRYPTE = :wdn_crypte
        )
order by 
    ORDRE_AFFICHAGE,
    nvl(FIN_VALIDITE, sysdate)

(seul le champ QUESTION est affiché dans la liste déroulante, le choix donne le CODE_QUESTION correspondant comme résultat, soit wcode_question)

Indiquez votre réponse : champ de saisie de wreponse.

Bouton VALIDER (rouge encadré « habituel »)

A la validation :

Supprimer accents, espaces et caractères spéciaux dans la réponse wreponse.

Vérifier que la réponse wreponse correspond à la réponse préalablement enregistrée qui s’obtient par la requête reponse_attendue_authentification_secours :

Select 
    REPONSE_QUESTION_1, 
    MOT_DE_PASSE 
from 
    ANNUAIRE6.AUTHENTIFICATION 
where 
    UID_CRYPTE = ? AND 
    CODE_QUESTION_1 = ?
Si la requête ne ramène aucune ligne

Erreur d’authentification

Retour à la page d’authentification standard.

Si la réponse ne correspond pas à la réponse enregistrée

Erreur d’authentification

Retour à la page d’authentification standard.

Si la réponse est correcte

Passer à l’enregistrement d’un nouveau mot de passe, comme décrit précédemment : Saisie d’un nouveau mot de passe.