2008-10-16 7 views
8

Je souhaite développer un site Web ASP Classic qui utilise l'authentification HTTP par rapport à une base de données ou à une liste de mots de passe contrôlée par le script. Idéalement, la solution ne doit impliquer aucun composant ou paramètre IIS car le script doit pouvoir être exécuté dans un environnement hébergé.Authentification HTTP (Basic ou Digest) dans ASP Classic via IIS

Tout indice/code profondément apprécié.

Répondre

9

Il est possible de faire l'authentification de base HTTP dans ASP VBScript classique pur.

Vous aurez besoin de quelque chose pour décoder la base 64. Here is a pure VBScript implementation. Vous devrez également vous assurer que dans votre configuration IIS, vous désactivez "Authentification de base" et "Authentification Windows intégrée", car ils vont interférer avec ce que vous obtenez dans l'en-tête HTTP_AUTHORIZATION.

Voici un exemple d'implémentation qui renvoie juste le nom d'utilisateur et le mot de passe.

<%@LANGUAGE="VBSCRIPT"%> 

<!--#include file="decbase64.asp" --> 

<% 
Sub Unauth() 
    Call Response.AddHeader("WWW-Authenticate", "Basic realm=""SomethingGoesHere""") 
    Response.Status = "401 Unauthorized" 
    Call Response.End() 
End Sub 

Dim strAuth 
strAuth = Request.ServerVariables("HTTP_AUTHORIZATION") 

If IsNull(strAuth) Or IsEmpty(strAuth) Or strAuth = "" Then 
    Call Unauth 
Else 
    %> 
    <html> 
    <body> 
    <% 
     Dim aParts, aCredentials, strType, strBase64, strPlain, strUser, strPassword 
     aParts = Split(strAuth, " ") 
     If aParts(0) <> "Basic" Then 
      Call Unauth 
     End If 
     strPlain = Base64Decode(aParts(1)) 
     aCredentials = Split(strPlain, ":") 
    %> 
    <%= Server.HTMLEncode(aCredentials(0) & " - " & aCredentials(1)) %> 
    </body> 
    </html> 
    <% 
End If 
%> 

Accrocher le nom d'utilisateur et le mot de passe à quelque chose de significatif est laissé comme un exercice pour le lecteur.

0

Bonjour essayez-vous d'obtenir une liste d'utilisateurs à partir d'une base de données ou d'utiliser des autorisations réseau sur le serveur HTTP?

Si vous utilisez une base de données utilisent ODBC et DSN

Dim DatabaseObject1 
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection") 
DatabaseObject1.Open("DSN=DSNname;") 

Si vous manquez une boîte de dialogue de mot de passe (à partir du serveur), vous devrez modifier les paramètres IIS pour un bon guide pour ce ..

http://www.authenticationtutorial.com/tutorial/

3

par définition, l'authentification HTTP est quelque chose qui est demandée par le serveur Web, je doute que vous trouverez une solution qui ne donne pas lieu à aucun paramètre IIS appliqué.

Le navigateur Web se connectera à votre site Web et, à moins que votre serveur ne réponde avec un code de réponse HTTP HTTP/1.1 401 Non autorisé, le navigateur ne passera pas par les informations d'identification.

Vous pouvez essayer de forcer un code de réponse de 401 et définir l'en-tête

WWW-Authenticate: Basic realm="SomethingGoesHere" 

Ensuite, le navigateur demandera à l'utilisateur pour le nom d'utilisateur et mot de passe, mais sera envoyé sur texte clair au navigateur (base64 codé), comme ceci:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95 

qui se traduit de base64 à:

brianb:bobbyboy 

Je ne sais pas si vous aurez accès à l'en-tête Authorization à partir de votre page ASP, ou si le serveur Web va paniquer parce que quelqu'un essaie de lui transmettre des informations d'identification quand il ne s'y attend pas, mais pourrait valoir un essai ...

+0

l'utilisateur et le mot de passe doivent être hachés avant le codage en base64, et non à moins que vous souhaitiez que quelqu'un qui consulte le trafic en base64 décode vos informations d'identification. – booyaa