我想在ASP經典中開發一個網站,該網站使用HTTP身份驗證來控制受腳本控制的數據庫或密碼列表。理想情況下,該解決方案不應包含組件或IIS設置,因爲該腳本應該可在託管環境中運行。通過IIS在ASP經典中的HTTP身份驗證(基本或摘要)
任何線索/代碼深表讚賞。
我想在ASP經典中開發一個網站,該網站使用HTTP身份驗證來控制受腳本控制的數據庫或密碼列表。理想情況下,該解決方案不應包含組件或IIS設置,因爲該腳本應該可在託管環境中運行。通過IIS在ASP經典中的HTTP身份驗證(基本或摘要)
任何線索/代碼深表讚賞。
可以在純經典ASP VBScript中執行HTTP基本身份驗證。
您將需要一些東西來解碼基地64. Here is a pure VBScript implementation。您還需要確保在IIS配置中關閉「基本身份驗證」和「集成Windows身份驗證」,因爲這些會干擾您在HTTP_AUTHORIZATION標頭中獲得的內容。
這是一個示例實現,只是回顯用戶名和密碼。
<%@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
%>
將用戶名和密碼連接到某些有意義的東西留給練習讀者。
嗨,你想獲取數據庫中的用戶列表或在HTTP服務器上使用基於網絡的權限?
如果您使用的是數據庫的使用ODBC和DSN
Dim DatabaseObject1
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection")
DatabaseObject1.Open("DSN=DSNname;")
如果你想要一個密碼對話框(從服務器),您需要更改IIS設置一個很好的指南,這個..
根據定義,HTTP驗證是通過服務器請求的東西,我懷疑你會發現,不會導致任何IIS設置被應用的解決方案。
網絡瀏覽器將連接到您的網站,除非您的服務器使用HTTP響應代碼HTTP/1.1 401未經授權進行響應,否則瀏覽將不會通過憑證。
你可以嘗試,並迫使401響應代碼,並設置頭
WWW-Authenticate: Basic realm="SomethingGoesHere"
然後,瀏覽器會提示輸入用戶名和密碼的用戶,但會在明文發送到瀏覽器的(Base64編碼),如下所示:
Authorization: Basic YnJpYW5iOmJvYmJ5Ym95
其從Base64的轉換爲:
brianb:bobbyboy
我不知道您是否可以訪問您的ASP頁面的授權標頭,或者如果Web服務器會因爲有人試圖向其傳遞憑據而不願意時向其發送令人驚訝的信息,但可能值得一個嘗試...
用戶和密碼應在base64編碼之前進行散列處理,除非您希望有人嗅探流量以base64解碼您的憑證。 – booyaa 2013-08-29 11:54:15