Principe d'authentification serveur
Bonjour tout le monde,
Je suis en train de faire une application client/serveur. Chaque utilisateurs pourra avoir accès ou non à certaines fonctionnalités suivant leur droits.
L'authentification de l'utilisateur pourra soit durer jusqu'à la fermeture de l'application soit durer X jours/mois/années.
Jusque là, une application classique.
Seulement voila, je ne suis pas certain à 100% de bien comprendre comment le principe d'authentification fonctionne.
Je pense que séparer l'authentification du (des) serveur(s) d'application est une bonne idée.
Est-ce que je me trompe?
J'ai fait diverses recherches sur les modes d'authentifications et je pense utiliser les token comme base.
Voici la conclusion de mes recherches:
- Le client contacte le serveur d'applications (APP)
- APP demande au serveur d'authentification (AUTH) si le client à les droits
- AUTH regarde dans sa base de données et répond que non et envoie un numéro sur Xbits généré aléatoirement
- APP envoie au client un requête d'authentification en lui envoyant le numéro généré aléatoirement
- Le client affiche une page d'authentification. L'utilisateur met ses identifiant et mot de passe. Le mot de passe est hashé avec un algo style SHA-256 (si je me trompe pas). Encodage du numéro aléatoire avec le mot de passe hashé
- APP envoie à AUTH le numéro encodé
- AUTH prend récupère de la base de données le mot de passe hashé de l'utilisateur, encode le numéro généré précédemment avec le mot de passe hashé et compare avec le numéro encodé reçu
- Si la comparaison est vraie, AUTH génère un token, le sauvegarde dans la base de données et l'envoie à APP
- APP envoie au client le token
- Le client sauvegarde le token (cookie ou autre). A chaque requète du client, il donne le token à APP. APP demande à AUTH si le token est encore valide.
Est-ce que c'est suffisamment sécurisé?
Est-ce que je me prends pas un peu trop la tête?
Est-ce qu'ajouter l'ip du client pour générer le token est une bonne idée/utile? (j'imagine si le token se fait intercepter, il y aurait potentiellement une faille si on ne teste pas d'où on se connecte non?)
Voila toutes mes interrogations (pour le moment...).
Merci d'avance!