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

1
//*********************************************************************
2
// © Tous droits réservés.
3
//
4
// Objectif :
5
// Exemple de code pour un module HTTP
6
//
7
//*********************************************************************
8
9
10
using System;
11
using System.Web;
12
using System.Security.Principal;
13
using System.Text;
14
using System.Diagnostics;
15
16
namespace MyCompany.Hosting.Samples
17
18
{
19
20
///<summary>
21
/// Description sommaire pour CustomAuthModule
22
///<summary>
23
publicclassCustomAuthModule : IHttpModule
24
25
{
26
///<summary>
27
/// Constructeur
28
///<summary>
29
30
public CustomAuthModule()
31
32
{
33
34
35
}
36
37
38
#region IHttpModule Members
39
40
41
///<summary>
42
/// Libérer toute ressource
43
///<summary>
44
publicvoid Dispose()
45
46
{
47
48
49
}
50
51
52
///<summary>
53
/// Initialisation du module
54
///<summary>
55
///<param name="context"></param>
56
publicvoid Init(HttpApplication application)
57
58
{
59
60
application.AuthenticateRequest += newEventHandler(application_AuthenticateRequest);
61
62
}
63
64
65
///<summary>
66
/// Déléguer pour authentifier une requête
67
///<summary>
68
///<param name="context"></param>
69
///<param name="context"></param>
70
void application_AuthenticateRequest(object sender, EventArgs e)
71
72
{
73
74
HttpApplication application = sender asHttpApplication;
75
76
Debug.Assert(application != null);
77
78
// Le client a-t-il envoyé les renseignements d'autorisation
79
//
80
if (application.Context.Request.ServerVariables["HTTP_AUTHORIZATION"] == null)
81
82
{
83
84
// Redirige le client pour envoyer les justificatifs d'identité HTTP de base
85
//
86
87
application.Response.StatusCode = 401;
88
application.Response.AddHeader("WWW-Authenticate", "Basic");
89
application.Response.End();
90
91
}
92
93
else
94
95
{
96
97
// Récupérer la chaîne d'authentification
98
//
99
string authString = application.Request.ServerVariables["HTTP_AUTHORIZATION"];
100
// Si la méthode d'authentification est de base
101
//
102
if (authString.StartsWith("basic", StringComparison.InvariantCultureIgnoreCase))
103
{
104
string[] justificatifs d'identité;
105
bool isValidutilisateur = false;
106
107
108
// Décoder les justificatifs d'identité
109
//
110
credentials = DecodeBase64String(authString.Substring(6)).Split(':');
111
112
113
// Les justificatifs d'identité devraient présenter deux cellules
114
//
115
// credentials[0] est le nom d'utilisateur
116
// credentials[1] est le mot de passe
117
Debug.Assert(credentials.Length == 2);
118
119
120
//
121
// ****************************
122
// Effectuer la vérification ici
123
// ****************************
124
//
125
// isValidUser = VotreMéthodeIdentificaation(credentials[0], credentials[1]);
126
127
128
if (isValidUser)
129
{
130
// Créer un utilisateur
131
//
132
GenericPrincipal user =
133
newGenericPrincipal(
134
newGenericIdentity(credentials[0], authString),
135
newstring[] { "role_name" });
136
137
138
// Définir cet utilisateur pour la session
139
//
140
application.Context.User = user;
141
142
}
143
144
}
145
146
}
147
148
}
149
150
151
///<summary>
152
/// Décode une chaîne chiffrée Base64
153
///<summary>
154
///<param name="base64EncodedString"> </param>
155
///<returns></returns>
156
privatestring DecodeBase64String(string base64EncodedString)
157
158
{
159
try
160
{
161
UTF-8Encoding encoder = newUTF-8Encoding();
162
Decoder decoder = encoder.GetDecoder();
163
164
165
byte[] bytesToDecode = Convert.FromBase64String(base64EncodedString);
166
int charCount = decoder.GetCharCount(bytesToDecode, 0, bytesToDecode.Length);
167
char[] decodedChars = newchar[charCount];
168
169
170
171
decoder.GetChars(bytesToDecode, 0,
172
bytesToDecode.Length, decodedChars, 0);
173
174
175
returnnewString(decodedChars);
176
177
}
178
179
catch (Exception e)
180
181
{
182
183
thrownewException("Error dans DecodeBase64String : " + e.Message);
184
185
}
186
187
}
188
189
190
#endregion
191
192
}
193
194
}
Copied!
Dernière mise à jour 1yr ago
Copier le lien