2008-10-16 11 views
8

Chcę stworzyć stronę internetową w klasycznej ASP, która korzysta z uwierzytelniania HTTP w oparciu o bazę danych lub listę haseł, która jest pod kontrolą skryptu. Najlepiej byłoby, gdyby rozwiązanie nie zawierało żadnych komponentów ani ustawień IIS, ponieważ skrypt powinien być uruchamiany w środowisku hostowanym.Uwierzytelnianie HTTP (Basic lub Digest) w ASP Classic przez IIS

Wszelkie wskazówki/kodeks są doceniane.

Odpowiedz

9

Możliwe jest wykonywanie podstawowego uwierzytelniania HTTP w czystym klasycznym ASP VBScript.

Będziesz potrzebował czegoś do odkodowania bazy 64. Here is a pure VBScript implementation. Musisz również upewnić się, że w konfiguracji IIS wyłączasz "Podstawowe uwierzytelnianie" i "Zintegrowane uwierzytelnianie systemu Windows", ponieważ zakłócą one to, co otrzymasz z powrotem w nagłówku HTTP_AUTHORIZATION.

Oto przykładowa implementacja, która przywraca echo nazwę użytkownika i hasło.

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

Podłączenie nazwy użytkownika i hasła do czegoś znaczącego pozostawia się jako ćwiczenie dla czytelnika.

0

Witam próbujesz uzyskać listę użytkowników z bazy danych lub użyć uprawnień sieciowych na serwerze HTTP?

Jeśli używasz ODBC i DSN

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

Jeśli chcą okno dialogowe hasło (z serwera) użycie bazy danych, trzeba będzie zmienić ustawienia IIS dobrego przewodnika do tego ..

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

3

z definicji, uwierzytelnianie HTTP jest coś, co jest wymagane przez serwer, wątpię można znaleźć rozwiązanie, które nie spowodować żadnych ustawień IIS obecnie stosowane.

Przeglądarka internetowa połączy się z twoją stroną internetową, a jeśli twój serwer nie odpowie kodem odpowiedzi HTTP HTTP/1.1 401 Nieautoryzowany przeglądarka nie przejdzie poświadczeń.

Mógłbyś spróbować wymusić kod odpowiedzi 401 i ustawić nagłówek

WWW-Authenticate: Basic realm="SomethingGoesHere" 

Wtedy przeglądarka poprosi użytkownika o nazwę użytkownika i hasło, ale zostanie wysłany w ciągu zwykłego tekstu do przeglądarki (base64 kodowane), podobnie jak to:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95 

Która jest tłumaczony z Base64 do:

brianb:bobbyboy 

Nie wiem, czy będziesz mieć dostęp do nagłówka autoryzacji ze swojej strony ASP, czy też serwer internetowy będzie się wściekał, ponieważ ktoś próbuje przekazać dane uwierzytelniające, gdy nie oczekuje tego, ale może być warty spróbuj ...

+0

Hasło użytkownika i hasło powinny zostać zaszyfrowane przed kodowaniem base64, chyba że chcesz, aby ktoś wciągał ruch do base64 i dekodować twoje dane uwierzytelniające. – booyaa