Gluu – Bien choisir son serveur d impression

Author: Titanfall —

Short summary: # Vous trouverez ci-dessous un script d'authentification utilisé par le serveur Gluu pour implémenter Duo Security pour une authentification à deux facteurs (2FA). depuis org.xdi.service.cdi.util, importez CdiUtil depuis org.xdi.oxauth.security import Identity depuis org.xdi.model.custom.script.type.auth, importez PersonAuthenticationType depuis org.xdi.oxauth.service import UserService, AuthenticationService depuis org.xdi.service, importez MailService depuis org.xdi.util, importez ArrayHelper depuis org.xdi.util import StringHelper import duo_web importer […]

Quick overview

Site
Tutos GameServer
Canonical URL
https://tutos-gameserver.fr/2019/05/04/gluu-bien-choisir-son-serveur-d-impression/
LLM HTML version
https://tutos-gameserver.fr/2019/05/04/gluu-bien-choisir-son-serveur-d-impression/llm
LLM JSON version
https://tutos-gameserver.fr/2019/05/04/gluu-bien-choisir-son-serveur-d-impression/llm.json
Manifest
https://tutos-gameserver.fr/llm-endpoints-manifest.json
Estimated reading time
6 minutes (311 seconds)
Word count
1034

Key points

Structured content

# Vous trouverez ci-dessous un script d'authentification utilisé par le serveur Gluu pour implémenter Duo Security pour une authentification à deux facteurs (2FA).

depuis org.xdi.service.cdi.util, importez CdiUtil depuis org.xdi.oxauth.security import Identity depuis org.xdi.model.custom.script.type.auth, importez PersonAuthenticationType depuis org.xdi.oxauth.service import UserService, AuthenticationService depuis org.xdi.service, importez MailService depuis org.xdi.util, importez ArrayHelper depuis org.xdi.util import StringHelper

import duo_web importer json

classe PersonAuthentication (PersonAuthenticationType):     def __init __ (self, currentTimeMillis):         self.currentTimeMillis = currentTimeMillis

    def init (self, configurationAttributes):         print "Duo. Initialization"

        duo_creds_file = configurationAttributes.get ("duo_creds_file"). getValue2 ()         # Charger les informations d'identification du fichier         f = open (duo_creds_file, 'r')         essayer:             creds = json.loads (f.read ())         sauf:             print "Duo. Initialization. Impossible de charger les créations à partir du fichier:", duo_creds_file             retourne Faux         enfin:             f.close ()

        self.ikey = str (creds["ikey"])         self.skey = str (creds["skey"])         self.akey = str (creds["akey"])

        self.use_duo_group = False         if (configurationAttributes.containsKey ("groupe_duo")):             self.duo_group = configurationAttributes.get ("duo_group"). getValue2 ()             self.use_duo_group = True             print "Duo. Initialization. Utiliser Duo uniquement si l'utilisateur appartient au groupe:", self.duo_group

        self.use_audit_group = False         if (configurationAttributes.containsKey ("groupe_audits")):             self.audit_group = configurationAttributes.get ("audit_group"). getValue2 ()

            if (pas configurationAttributes.containsKey ("audit_group_email")):                 print "Duo. Initialization. La propriété audit_group_email n'est pas spécifiée"                 retourne Faux

            self.audit_email = configurationAttributes.get ("audit_group_email"). getValue2 ()             self.use_audit_group = True

            print "Duo. Initialization. Utilisation de audito group:", self.audit_group                      if (self.use_duo_group ou self.use_audit_group):             if (pas configurationAttributes.containsKey ("audit_attribute")):                 print "Duo. Initialization. La propriété audit_attribute n'est pas spécifiée"                 retourne Faux             autre:                 self.audit_attribute = configurationAttributes.get ("audit_attribute"). getValue2 ()

        print "Duo. Initialisé avec succès"         retourne True

    def destroy (self, configurationAttributes):         print "Duo. Destroy"         print "Duo. Détruit avec succès"         retourne True

    def getApiVersion (auto):         retour 1

    def isValidAuthenticationMethod (self, usageType, configurationAttributes):         retourne True

    def getAlternativeAuthenticationMethod (self, usageType, configurationAttributes):         retourner Aucun

    def authenticate (self, configurationAttributes, requestParameters, step):         duo_host = configurationAttributes.get ("duo_host"). getValue2 ()

        authenticationService = CdiUtil.bean (AuthenticationService)

        identity = CdiUtil.bean (Identity)

        si (étape == 1):             print "Duo. Authentifiez-vous pour l'étape 1"

            credentials = identity.getCredentials ()             nom_utilisateur = credentials.getUsername ()             mot_de_passe_utilisateur = credentials.getPassword ()

            logs_in = Faux             if (StringHelper.isNotEmptyString (nom_utilisateur) et StringHelper.isNotEmptyString (mot_utilisateur_utilisateur)):                 userService = CdiUtil.bean (UserService)                 log_in = authenticationService.authenticate (nom d'utilisateur, mot de passe utilisateur)

            si (non connecté):                 retourne Faux

            utilisateur = authenticationService.getAuthenticatedUser ()             si (self.use_duo_group):                 print "Duo. Authentifiez-vous à l'étape 1. Vérification de l'appartenance de l'utilisateur au groupe Duo"                 is_member_duo_group = self.isUserMemberOfGroup (utilisateur, self.audit_attribute, self.duo_group)                 if (is_member_duo_group):                     print "Duo. Authentifiez-vous à l'étape 1. Utilisateur '" + utilisateur.getUserId () + "' membre du groupe Duo"                     duo_count_login_steps = 2                 autre:                     self.processAuditGroup (utilisateur)                     duo_count_login_steps = 1

                identity.setWorkingParameter ("duo_count_login_steps", duo_count_login_steps)

            retourne True         elif (step == 2):             print "Duo. Authentifiez-vous à l'étape 2"             utilisateur = authenticationService.getAuthenticatedUser ()             si utilisateur == Aucun:                 print "Duo. Authentifiez-vous à l'étape 2. Echec de la détermination du nom d'utilisateur"                 retourne Faux

            nom_utilisateur = utilisateur.getUserId ()

            sig_response_array = requestParameters.get ("sig_response")             si ArrayHelper.isEmpty (sig_response_array):                 print "Duo. Authentifiez-vous à l'étape 2. sig_response est vide"                 retourne Faux

            duo_sig_response = sig_response_array[0]

print "Duo. Authentifiez-vous à l'étape 2. duo_sig_response:" + duo_sig_response

            nom_utilisateur_authentifié = duo_web.verify_response (self.ikey, self.skey, self.akey, duo_sig_response)

            print "Duo. Authentifiez-vous à l'étape 2. nom d'utilisateur authentifié:" + nom d'utilisateur authentifié + ", nom d'utilisateur attendu:" + nom d'utilisateur

            if (non StringHelper.equals (nom d'utilisateur, nom d'utilisateur authentifié)):                 retourne Faux

            self.processAuditGroup (utilisateur)

            retourne True         autre:             retourne Faux

    def prepareForStep (self, configurationAttributes, requestParameters, step):         identity = CdiUtil.bean (Identity)         authenticationService = CdiUtil.bean (AuthenticationService)

        duo_host = configurationAttributes.get ("duo_host"). getValue2 ()

        si (étape == 1):             print "Duo. Préparez-vous pour l'étape 1"

            retourne True         elif (step == 2):             print "Duo. Préparez-vous pour l'étape 2"

            utilisateur = authenticationService.getAuthenticatedUser ()             si (utilisateur == aucun):                 print "Duo. Préparez-vous pour l'étape 2. Echec de la détermination du nom d'utilisateur"                 retourne Faux             nom_utilisateur = utilisateur.getUserId ()

            duo_sig_request = duo_web.sign_request (self.ikey, self.skey, self.akey, nom d'utilisateur)             print "Duo. Préparez-vous pour l'étape 2. duo_sig_request:" + duo_sig_request                          identity.setWorkingParameter ("duo_host", duo_host)             identity.setWorkingParameter ("duo_sig_request", duo_sig_request)

            retourne True         autre:             retourne Faux

    def getExtraParametersForStep (self, configurationAttributes, step):         retourner Aucun

    def getCountAuthenticationSteps (self, configurationAttributes):         identity = CdiUtil.bean (Identity)         if (identity.isSetWorkingParameter ("duo_count_login_steps")):             return identity.getWorkingParameter ("duo_count_login_steps")

        retour 2

    def getPageForStep (self, configurationAttributes, step):         si (étape == 2):             retourne "/auth/duo/duologin.xhtml"         revenir ""

    def logout (self, configurationAttributes, requestParameters):         retourne True

    def isUserMemberOfGroup (self, utilisateur, attribut, groupe):         is_member = False         member_of_list = user.getAttributeValues ​​(attribut)         if (member_of_list! = None):             pour member_of dans member_of_list:                 si StringHelper.equalsIgnoreCase (group, member_of) ou member_of.endswith (group):                     is_member = True                     Pause

        retourne_membre

    def processAuditGroup (self, user):         si (self.use_audit_group):             is_member = self.isUserMemberOfGroup (utilisateur, self.audit_attribute, self.audit_group)             if (is_member):                 print "Duo. Authentifiez-vous pour processAuditGroup. User '" + user.getUserId () + "' membre du groupe d'audit"                 print "Duo. Authentifiez-vous pour processAuditGroup. Envoi d'un courrier électronique concernant l'utilisateur '" + user.getUserId () + "' se connecter à", self.audit_email                                  # Envoyer un e-mail à l'administrateur                 user_id = user.getUserId ()                 mailService = CdiUtil.bean (MailService)                 subject = "Connexion de l'utilisateur:" + user_id                 body = "Connexion utilisateur:" + user_id                 mailService.sendMail (self.audit_email, sujet, corps)

Click to rate this post! [Total: 0 Average: 0]

Topics and keywords

Themes: Serveur d'impression

License & attribution

License: CC BY-ND 4.0.

Attribution required: yes.

Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json

LLM Endpoints plugin version 1.1.2.