Easter notes for authentication

This commit is contained in:
Fred Pauchet 2022-05-01 19:13:19 +02:00
parent 7d81286462
commit e0b0a862cd
1 changed files with 25 additions and 16 deletions

View File

@ -2,8 +2,8 @@
Comme on l'a vu dans la partie sur le modèle, nous souhaitons que le créateur d'une liste puisse retrouver facilement les éléments qu'il aura créée.
Ce dont nous n'avons pas parlé cependant, c'est la manière dont l'utilisateur va pouvoir créer son compte et s'authentifier.
La \href{https://docs.djangoproject.com/en/stable/topics/auth/}{documentation} est très complète, nous allons essayer de la simplifier au maximum.
Accrochez-vous, le sujet peut être complexe.
La \href{https://docs.djangoproject.com/en/stable/topics/auth/}{documentation} est très complète (et un peu complexe), nous allons essayer de la simplifier au maximum.
Accrochez-vous, le sujet peut être tendu lors d'une première exploration.
\section{Utilisateurs}
@ -12,6 +12,10 @@ Par défaut, Django offre une gestion simplifiée des utilisateurs (pas de conne
authentification, ...: juste un utilisateur et un mot de passe.
Pour y accéder, un paramètre par défaut est défini dans votre fichier de settings: \texttt{AUTH\_USER\_MODEL}.
Toute modification de la modélisation des utilisateurs exige qu'un modèle personnalisé existe.
La première difficulté est que toute modification en cours de route de la modélisation des utilisateurs
\section{Mécanisme d'authentification}
On peut schématiser le flux d'authentification de la manière suivante :
@ -47,16 +51,16 @@ En résumé (bis):
utilisée de manière uniforme dans l'application.
\end{enumerate}
Ci-dessous, on définit deux backends différents pour mieux comprendre
les différentes possibilités:
Ci-dessous, on définit deux backends différents pour mieux comprendre les différentes possibilités:
\begin{enumerate}
\item
Une authentification par jeton
\item
Une authentification LDAP
\item Une authentification par jeton (token)
\item Une authentification LDAP
\item Une authentification en envoyant une clé directement sur l'adresse email de l'utilisateur.
\end{enumerate}
\subsection{Authentification par jeton}
\begin{minted}{python}
from datetime import datetime
@ -90,6 +94,8 @@ class TokenBackend(backends.ModelBackend):
Ceci sous-entend qu'on a bien une classe qui permet d'accéder à ces jetons.
\subsection{Authentification LDAP}
\begin{minted}{python}
from django.contrib.auth import backends, get_user_model
from ldap3 import Server, Connection, ALL
@ -125,6 +131,11 @@ class LdapBackend(backends.ModelBackend):
return user
\end{minted}
\subsection{Authentification OTP par email}
\subsection{Résumé}
On peut résumer le mécanisme d'authentification de la manière suivante:
@ -174,11 +185,6 @@ Avant de commencer, sachez que cette étape doit être effectuée \textbf{avant
Notez bien qu'il ne faut pas spécifier le package \texttt{.models} dans cette injection de dépendances: le schéma à indiquer est bien \texttt{\textless{}nom\ de\ lapplication\textgreater{}.\textless{}nom\ de\ la\ classe\textgreater{}}.
\subsection{Social-auth}
Voir ici : \href{https://github.com/omab/python-social-auth}{python
social auth}
\subsection{OAuth}
OAuth est un standard libre définissant un ensemble de méthodes à implémenter pour l'accès (l'autorisation) à une API. Son fonctionnement se base sur un système de jetons (Tokens), attribués par le possesseur de la ressource à laquelle un utilisateur souhaite accéder.
@ -195,8 +201,6 @@ possède, sans pour autant révéler son nom d'utilisateur ou son mot de passe.
L'exemple repris au niveau du \href{http://hueniverse.com/oauth/guide/workflow/}{workflow} est le suivant : un utilisateur(trice), Jane, a uploadé des photos sur le site faji.com (A). Elle souhaite les imprimer au travers du site beppa.com (B). Au moment de la commande, le site beppa.com envoie une demande au site faji.com pour accéder aux ressources partagées par Jane. Pour cela, une nouvelle page s'ouvre pour l'utilisateur, et lui demande d'introduire sa "pièce d'identité". Le site A, ayant reçu une demande de B, mais certifiée par l'utilisateur, ouvre alors les ressources et lui permet d'y accéder.
\section{Templates}
Ce qui n'existe pas par contre, ce sont les vues. Django propose donc
@ -214,4 +218,9 @@ On y trouve par exemple les paramètres suivants:
\item
\texttt{LOGIN\_URL}: l'URL de connexion à utiliser. Par défaut,
l'utilisateur doit se rendre sur la page \texttt{/accounts/login}.
\end{itemize}
\end{itemize}
\section{Social-auth}
Voir ici : \href{https://github.com/omab/python-social-auth}{python
social auth}