Exemple de code pour un module HTTP

Aperçu

Cet exemple de module HTTP utilise une authentification HTTP. Vous devez insérer votre propre méthode d'authentification des utilisateurs.

Pour de plus amples détails sur le développement de modules HTTP personnalisés, veuillez consulter la documentation .NET de Microsoft.

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
}
}