8

我想在 ASP 经典中开发一个网站,对脚本控制下的数据库或密码列表使用 HTTP 身份验证。理想情况下,该解决方案不应涉及任何组件或 IIS 设置,因为脚本应可在托管环境中运行。

任何线索/代码都非常感谢。

4

3 回答 3

11

可以在纯经典 ASP VBScript 中进行 HTTP 基本身份验证。

您将需要一些东西来解码 base 64。这是一个纯 VBScript 实现。您还需要确保在 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
%>

将用户名和密码与有意义的东西挂钩,留给读者作为练习。

于 2009-11-13T01:46:06.197 回答
3

根据定义,HTTP 身份验证是 WebServer 请求的,我怀疑您会找到一个不会导致不应用 IIS 设置的解决方案。

Web 浏览器将连接到您的网站,除非您的服务器使用 HTTP 响应代码 HTTP/1.1 401 Unauthorized 进行响应,否则浏览将不会通过凭据。

您可以尝试强制响应代码 401 并设置标题

   WWW-Authenticate: Basic realm="SomethingGoesHere"

然后浏览器将提示用户输入用户名和密码,但将通过明文发送到浏览器(base64 编码),如下所示:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95

从 Base64 翻译为:

brianb:bobbyboy

我不知道您是否可以从您的 ASP 页面访问 Authorization 标头,或者 Web 服务器是否会因为有人试图将凭据传递给它而出乎意料,但可能值得一试尝试...

于 2008-10-16T11:50:00.480 回答
0

嗨,您是要从数据库中获取用户列表还是在 HTTP 服务器上使用基于网络的权限?

如果您使用的是数据库,请使用 ODBC 和 DSN

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

如果您想要一个密码对话框(来自服务器),您需要更改 IIS 设置以获得很好的指南。

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

于 2008-10-16T11:42:02.743 回答