通过IIS在ASP Classic中进行HTTP身份验证(基本或摘要)

时间:2008-10-16 10:43:33

标签: http iis authentication asp-classic http-authentication

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

任何线索/代码都深受赞赏。

3 个答案:

答案 0 :(得分:10)

可以在纯粹的经典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
%>

将用户名和密码挂钩到有意义的内容留给读者练习。

答案 1 :(得分:3)

根据定义,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服务器是否会因为有人试图在不期望的情况下向其传递凭据而感到恐惧,但是值得一试......

答案 2 :(得分:0)

您是否试图从数据库中获取用户列表或在HTTP服务器上使用基于网络的权限?

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

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

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

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