Glasnost

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:

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()