2008-10-16 11 views
8

Ich möchte eine Website in ASP classic entwickeln, die HTTP-Authentifizierung für eine Datenbank oder eine Kennwortliste verwendet, die von dem Skript gesteuert wird. Idealerweise sollte die Lösung keine Komponenten oder IIS-Einstellungen enthalten, da das Skript in einer gehosteten Umgebung ausgeführt werden sollte.HTTP-Authentifizierung (Basic oder Digest) in ASP Classic über IIS

Alle Hinweise/Code zutiefst geschätzt.

Antwort

9

Es ist möglich, HTTP Basic Authentication in reinem klassischen ASP VBScript zu tun.

Sie benötigen etwas, um Base 64 zu decodieren. Here is a pure VBScript implementation. Sie müssen auch sicherstellen, dass Sie in Ihrer IIS-Konfiguration die "Standardauthentifizierung" und die "Integrierte Windows-Authentifizierung" deaktivieren, da diese das zurückwerfen, was Sie im Header HTTP_AUTHORIZATION zurückbekommen.

Hier ist eine Beispielimplementierung, die nur den Benutzernamen und das Kennwort zurückgibt.

<%@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 
%> 

Das Einhängen des Benutzernamens und des Kennworts bis zu etwas aussagekräftigem wird dem Leser als Übung überlassen.

0

Hallo, versuchen Sie, eine Liste von Benutzern aus einer Datenbank zu erhalten oder verwenden Sie netzwerkbasierte Berechtigungen für den HTTP-Server?

Wenn Sie eine Datenbank verwenden ODBC und DSN

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

Wenn Sie ein Passwort-Dialogfeld fehlen (vom Server), müssen Sie IIS-Einstellungen für eine gute Anleitung dazu verändern ..

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

3

per Definition HTTP-Authentifizierung ist etwas, das von der WebServer angefordert wird, bezweifle ich, Sie werden eine Lösung finden, die nicht in keine IIS-Einstellungen führt angewendet wird.

Der Webbrowser stellt eine Verbindung zu Ihrer Website her, und wenn Ihr Server nicht mit dem HTTP-Antwortcode HTTP/1.1 401 Nicht autorisiert antwortet, werden die Anmeldeinformationen nicht durchsucht.

Sie könnten versuchen, und einen Antwortcode von 401 erzwingen und stellen Sie den Header

WWW-Authenticate: Basic realm="SomethingGoesHere" 

Dann wird der Browser den Benutzer nach Benutzernamen und Passwort fragt, wird aber über Klartext an den Browser (base64 gesendet werden codiert), wie folgt aus:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95 

die sich von Base64 übersetzt:

brianb:bobbyboy 

Ich weiß nicht, ob Sie Zugriff auf den Authorization-Header von Ihrer ASP-Seite haben oder ob der Web-Server ausflippt, weil jemand versucht, Anmeldeinformationen an ihn zu senden, wenn er es nicht erwartet, aber könnte es wert sein ein Versuch ...

+0

Benutzer und Kennwort sollten vor der base64-Codierung gehashed werden, es sei denn, Sie möchten, dass jemand den Datenverkehr zu base64 entschlüsselt, um Ihre Anmeldeinformationen zu entschlüsseln. – booyaa