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 dans le Guide technique WorkflowGen.

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.

Code source

//*********************************************************************
// © 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       

    }

}