# Exemple de code pour un module HTTP

## Aperçu

Cet exemple est un module HTTP qui utilise la variable serveur **HTTP\_AUTHORIZATION** pour l'authentification. Vous devez insérer votre propre méthode pour authentifier les utilisateurs.

Pour plus d'informations, consultez la section [Authentification HTTP personnalisée de base](https://docs.advantys.com/workflowgen-guide-technique/securite#authentification-http-personnalisee-de-base) dans le [Guide technique WorkflowGen](https://docs.advantys.com/workflowgen-guide-technique/).

{% hint style="info" %}
Cet exemple utilise la méthode d'**authentification de base** commune pour demander et récupérer les informations d'identification de l'utilisateur. Il peut être facilement modifié pour utiliser toute autre méthode standard ou personnalisée, telle qu'un jeton ou un nom d'utilisateur stocké dans un cookie, un paramètre de chaîne de requête, un paramètre de données de formulaire ou une variable de serveur.

L'**objectif principal** de ce module HTTP personnalisé est de créer et de définir l'objet **GenericPrincipal** avec un nom d'utilisateur de connexion valide (en texte clair) du contexte de requête HTTP actuel qui sera ensuite utilisé par WorkflowGen pour vérifier et charger le profil de l'utilisateur.
{% endhint %}

## Code source

```markup
//*********************************************************************
// © Tous droits réservés.
//
// Objectif :
// Exemple de code pour un module HTTP
//
//*********************************************************************


using System;
using System.Web;
using System.Security.Principal;
using System.Text;
using System.Diagnostics;

namespace MyCompany.Hosting.Samples

{

    ///<summary>
    /// Description sommaire pour CustomAuthModule
    ///<summary>
    publicclassCustomAuthModule : IHttpModule

    {
        ///<summary>
        /// Constructeur
        ///<summary>

    public CustomAuthModule()

    {


    }


        #region IHttpModule Members


        ///<summary>
        /// Libérer toute ressource
        ///<summary>
        publicvoid Dispose()

        {


        }


        ///<summary>
        /// Initialisation du module
        ///<summary>
        ///<param name="context"></param>
        publicvoid Init(HttpApplication application)

        {

            application.AuthenticateRequest += newEventHandler(application_AuthenticateRequest);

        }


        ///<summary>
        /// Déléguer pour authentifier une requête
        ///<summary>
        ///<param name="context"></param>
        ///<param name="context"></param>
        void application_AuthenticateRequest(object sender, EventArgs e)

        {

            HttpApplication application = sender asHttpApplication;

            Debug.Assert(application != null);

            // Le client a-t-il envoyé les renseignements d'autorisation
            //
            if (application.Context.Request.ServerVariables["HTTP_AUTHORIZATION"] == null)

            {               

                // Redirige le client pour envoyer les justificatifs d'identité HTTP de base
                //

                application.Response.StatusCode = 401;
                application.Response.AddHeader("WWW-Authenticate", "Basic");
                application.Response.End();

            }

            else

            {

                // Récupérer la chaîne d'authentification
                //
                string authString = application.Request.ServerVariables["HTTP_AUTHORIZATION"];
                // Si la méthode d'authentification est de base
                //
                if (authString.StartsWith("basic", StringComparison.InvariantCultureIgnoreCase))
                {
                    string[] justificatifs d'identité;
                    bool isValidutilisateur = false;


                    // Décoder les justificatifs d'identité
                    //
                    credentials = DecodeBase64String(authString.Substring(6)).Split(':');


                    // Les justificatifs d'identité devraient présenter deux cellules
                    //
                    // credentials[0] est le nom d'utilisateur
                    // credentials[1] est le mot de passe
                    Debug.Assert(credentials.Length == 2);


                    //
                    // ****************************
                    // Effectuer la vérification ici
                    // ****************************
                    //
                    // isValidUser = VotreMéthodeIdentificaation(credentials[0], credentials[1]);


                    if (isValidUser)
                    {
                        // Créer un utilisateur
                        //
                        GenericPrincipal user =
                            newGenericPrincipal(
                                newGenericIdentity(credentials[0], authString),
                                newstring[] { "role_name" });


                        // Définir cet utilisateur pour la session
                        //
                        application.Context.User = user;

                    }               

                } 

            }

        }


        ///<summary>
        /// Décode une chaîne chiffrée Base64
        ///<summary>
        ///<param name="base64EncodedString"> </param>
        ///<returns></returns>
        privatestring DecodeBase64String(string base64EncodedString)

        {
            try
            {
                UTF-8Encoding encoder = newUTF-8Encoding();
                Decoder decoder = encoder.GetDecoder();


                byte[] bytesToDecode = Convert.FromBase64String(base64EncodedString);
                int charCount = decoder.GetCharCount(bytesToDecode, 0, bytesToDecode.Length);
                char[] decodedChars = newchar[charCount];



                decoder.GetChars(bytesToDecode, 0,
                    bytesToDecode.Length, decodedChars, 0);


                returnnewString(decodedChars);

            }

            catch (Exception e)

            {

                thrownewException("Error dans DecodeBase64String : " + e.Message);

        }

        }


        #endregion       

    }

}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.workflowgen.com/tech-fr/exemple-de-code-pour-un-module-http.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
