通过 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 身份验证(基本或摘要)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

IIS7 上的 ASP Classic 无法创建 COM 对象

IIS7中Integrated和classic的区别

ASP Classic 中的事务问题

IIS 7开发与管理完全参考手册(第一章部分内容)

ASP Classic 页面停止工作

IIS应用程序池添加ASP.NET v4.0