我想在 ASP 经典中开发一个网站,对脚本控制下的数据库或密码列表使用 HTTP 身份验证。理想情况下,该解决方案不应涉及任何组件或 IIS 设置,因为脚本应可在托管环境中运行。
任何线索/代码都非常感谢。
我想在 ASP 经典中开发一个网站,对脚本控制下的数据库或密码列表使用 HTTP 身份验证。理想情况下,该解决方案不应涉及任何组件或 IIS 设置,因为脚本应可在托管环境中运行。
任何线索/代码都非常感谢。
可以在纯经典 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
%>
将用户名和密码与有意义的东西挂钩,留给读者作为练习。
根据定义,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 服务器是否会因为有人试图将凭据传递给它而出乎意料,但可能值得一试尝试...
嗨,您是要从数据库中获取用户列表还是在 HTTP 服务器上使用基于网络的权限?
如果您使用的是数据库,请使用 ODBC 和 DSN
Dim DatabaseObject1
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection")
DatabaseObject1.Open("DSN=DSNname;")
如果您想要一个密码对话框(来自服务器),您需要更改 IIS 设置以获得很好的指南。