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_question | Fin_validite | Ordre_affichage | Type_reponse | Question |
|---|
| 1 | | 1 | A | Quel a été votre premier livre ? |
| 2 | | 2 | A | Quel était votre surnom enfantin ou celui de l'un de vos proches ? |
| 3 | | 3 | A | Quel a été votre premier voyage ? |
| 4 | | 4 | A | Quel est votre morceau de musique préféré ? |
| 5 | | 5 | A | Quelle est votre boisson préférée ? |
| 6 | | 6 | A | Quelle est votre fleur préférée ? |
| 7 | | 7 | A | Quelle est votre couleur préférée ? |
| 8 | | 8 | A | Quel est votre animal préféré ? |
| 9 | | 9 | N | Quel est votre nombre préféré ? |
| 10 | | 10 | A | Quel est le prénom de votre Grand-mère maternelle ? |
| 11 | | 11 | A | Quel est le prénom de votre Grand-mère paternelle ? |
| 12 | | 12 | A | Quel est le prénom de votre Grand-père paternel ? |
| 13 | | 13 | A | Quel 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_crypteSi 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.
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_questionSupprimer 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 à revoirEt 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
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.