2008-10-16 41 views
8

Tôi muốn phát triển một trang web trong ASP cổ điển sử dụng Xác thực HTTP dựa vào cơ sở dữ liệu hoặc danh sách mật khẩu nằm dưới sự kiểm soát của tập lệnh. Lý tưởng nhất, giải pháp nên liên quan đến không có thành phần hoặc cài đặt IIS vì kịch bản nên được chạy trong môi trường được lưu trữ.Xác thực HTTP (Cơ bản hoặc Thông báo) trong ASP Classic qua IIS

Bất kỳ đầu mối/mã nào được đánh giá cao.

Trả lời

9

Có thể thực hiện Xác thực cơ bản HTTP bằng ASP VBScript thuần túy cổ điển.

Bạn sẽ cần thứ gì đó để giải mã cơ sở 64. Here is a pure VBScript implementation. Bạn cũng sẽ cần phải chắc chắn rằng trong cấu hình IIS của bạn, bạn tắt "Xác thực cơ bản" và "Xác thực Windows tích hợp" vì chúng sẽ can thiệp vào những gì bạn nhận được trong tiêu đề HTTP_AUTHORIZATION.

Đây là triển khai mẫu chỉ phản hồi lại tên người dùng và mật khẩu.

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

Gắn tên người dùng và mật khẩu vào thứ gì đó có ý nghĩa còn lại dưới dạng tập thể dục cho người đọc.

0

Xin chào, bạn có đang cố gắng lấy danh sách người dùng từ cơ sở dữ liệu hoặc sử dụng quyền dựa trên mạng trên máy chủ HTTP không?

Nếu bạn đang sử dụng một ODBC sử dụng cơ sở dữ liệu và DSN

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

Nếu bạn đang muốn một hộp thoại mật khẩu (từ máy chủ), bạn sẽ cần phải thay đổi các thiết lập IIS cho một hướng dẫn tốt để này ..

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

3

theo định nghĩa, HTTP Authentication là cái gì đó là yêu cầu của webServer, tôi nghi ngờ bạn sẽ tìm thấy một giải pháp mà không dẫn đến không có IIS Cài đặt được áp dụng.

Trình duyệt web sẽ kết nối với trang web của bạn và trừ khi máy chủ của bạn phản hồi bằng mã phản hồi HTTP HTTP/1.1 401 trái phép, trình duyệt sẽ không chuyển qua thông tin xác thực.

Bạn có thể thử và buộc một mã phản hồi của 401 và đặt tiêu đề

WWW-Authenticate: Basic realm="SomethingGoesHere" 

Sau đó trình duyệt sẽ nhắc nhở người dùng cho tên người dùng và mật khẩu, nhưng sẽ được gửi qua văn bản rõ ràng cho trình duyệt (base64 mã hóa), như thế này:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95 

Đó là dịch từ Base64 để:

brianb:bobbyboy 

Tôi không biết liệu bạn có quyền truy cập vào tiêu đề Cấp phép từ trang ASP của bạn hay không, hoặc nếu Máy chủ Web sắp bị phân vân vì ai đó đang cố gắng chuyển thông tin vào nó khi nó không mong đợi, nhưng có thể đáng giá a try ...

+0

người dùng và mật khẩu phải được băm trước khi mã hóa base64, trừ khi bạn muốn ai đó đánh hơi lưu lượng truy cập đến base64 giải mã thông tin đăng nhập của bạn. – booyaa

Các vấn đề liên quan