通过 IIS 在 ASP Classic 中进行 HTTP 身份验证(基本或摘要)[关闭]
Posted
技术标签:
【中文标题】通过 IIS 在 ASP Classic 中进行 HTTP 身份验证(基本或摘要)[关闭]【英文标题】:HTTP Authentication (Basic or Digest) in ASP Classic via IIS [closed] 【发布时间】:2008-10-16 10:43:33 【问题描述】:我想在 ASP 经典中开发一个网站,该网站对脚本控制下的数据库或密码列表使用 HTTP 身份验证。理想情况下,该解决方案不应涉及任何组件或 IIS 设置,因为脚本应可在托管环境中运行。
非常感谢任何线索/代码。
【问题讨论】:
【参考方案1】:可以在纯经典的 ASP VBScript 中进行 HTTP 基本身份验证。
你需要一些东西来解码 base 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
%>
将用户名和密码与有意义的东西联系起来留给读者作为练习。
【讨论】:
【参考方案2】:根据定义,HTTP 身份验证是 WebServer 请求的,我怀疑您会找到不会导致不应用 IIS 设置的解决方案。
网络浏览器将连接到您的网站,除非您的服务器以 HTTP 响应代码 HTTP/1.1 401 Unauthorized 进行响应,否则浏览将不会通过凭据。
您可以尝试强制响应代码为 401 并设置标题
WWW-Authenticate: Basic realm="SomethingGoesHere"
然后浏览器会提示用户输入用户名和密码,但会以明文形式发送到浏览器(base64 编码),如下所示:
Authorization: Basic YnJpYW5iOmJvYmJ5Ym95
从Base64翻译成:
brianb:bobbyboy
我不知道您是否可以从您的 ASP 页面访问 Authorization 标头,或者 Web 服务器是否会因为有人试图将凭据传递给它而出乎意料,但可以值得一试...
【讨论】:
用户和密码应在 base64 编码之前进行哈希处理,除非您希望有人嗅探流量以对您的凭据进行 base64 解码。【参考方案3】:您好,您是要从数据库中获取用户列表还是在 HTTP 服务器上使用基于网络的权限?
如果您使用的是数据库,请使用 ODBC 和 DSN
Dim DatabaseObject1
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection")
DatabaseObject1.Open("DSN=DSNname;")
如果您想要一个密码对话框(来自服务器),您需要更改 IIS 设置以获得很好的指导。
http://www.authenticationtutorial.com/tutorial/
【讨论】:
以上是关于通过 IIS 在 ASP Classic 中进行 HTTP 身份验证(基本或摘要)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章