Création d'un nouveau type d'authentification
Cet article présente les principes pour créer un nouveau serveur d'authentification. Glasnost est fait de façon à pouvoir lui greffer de nouveau style d'authentification de façon simple. Un serveur d'authentification par défaut est fourni, et permet une authentification entièrement basé sur Glasnost. Il arrive que les utilisateurs du système existe déjà et l'on souhaite pouvoir les récupérer pour que les utilisateurs n'ait pas d'autre mot de passe à retenir, ou qu'il n'ait pas à ce créer un compte sur glasnost avec un mot de passe par exemple.
Pour cela, il vous faut créer un nouveau serveur d'authentification qui respecte quelques contraintes. Il faut que le proxy de votre serveur est les quatres méthodes suivantes déclarées:
- canEmailPassword(clientToken, userToken, login,context = None, serverId = None): doit retourner vrai si le serveur est capable de retourner le mot de passe de l'utilisateur en clair
- changePassword(clientToken, userToken, oldPassword, newPassword, context = None, serverId = None): doit modifier le mot de passe de l'utilisateur
- checkAuthentication(login, password, context = None, serverId = None): doit répondre vrai si le login et le mot de passe correspondent
- getPassword(clientToken, userToken, login, context = None, serverId = None): doit retourne le mot de passe de l'utilisateur en clair.
Ensuite pour utiliser votre nouveau serveur d'authentification il faut vous placer sur la page d'administration des personnes de votre site et mettre dans le champs Serveur d'authentification l'adresse glasnost du serveur par exemple glasnost://localhost/authenticationldap
Voici l'exemple de proxy pour le serveur d'authentification via LDAP:from DispatcherProxy import callServer, getApplicationToken from ObjectsProxy import Proxy from tools import * class AuthenticationLdapProxy(Proxy): serverRole = 'authenticationldap' def canEmailPassword(self, clientToken, userToken, userName, context = None, serverId = None): return 0 def changePassword(self, clientToken, userToken, userName, oldPassword, newPassword, context = None, serverId = None): serverId = self.getServerId(context = context, serverId = serverId) callServer(serverId, 'changePassword', [getApplicationToken(context = context), userToken, utf8(userName), utf8(oldPassword), utf8(newPassword)]) def checkAuthentication(self, userName, userPassword, context = None, serverId = None): serverId = self.getServerId(context = context, serverId = serverId) return callServer(serverId, 'checkAuthentication', [getApplicationToken(context = context), utf8(userName), utf8(userPassword)]) def getPassword(clientToken, userToken, login, context = None, serverId = None): return "" authenticationLdapProxy = AuthenticationLdapProxy()