通过IIS在ASP经典中的HTTP身份验证(基本或摘要)
我想在ASP经典中开发一个网站,该网站使用HTTP身份验证来控制受脚本控制的数据库或密码列表。理想情况下,该解决方案不应包含组件或IIS设置,因为该脚本应该可在托管环境中运行。通过IIS在ASP经典中的HTTP身份验证(基本或摘要)
任何线索/代码深表赞赏。
可以在纯经典ASP VBScript中执行HTTP基本身份验证。
您将需要一些东西来解码基地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
%>
将用户名和密码连接到某些有意义的东西留给练习读者。
嗨,你想获取数据库中的用户列表或在HTTP服务器上使用基于网络的权限?
如果您使用的是数据库的使用ODBC和DSN
Dim DatabaseObject1
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection")
DatabaseObject1.Open("DSN=DSNname;")
如果你想要一个密码对话框(从服务器),您需要更改IIS设置一个很好的指南,这个..
根据定义,HTTP验证是通过服务器请求的东西,我怀疑你会发现,不会导致任何IIS设置被应用的解决方案。
网络浏览器将连接到您的网站,除非您的服务器使用HTTP响应代码HTTP/1.1 401未经授权进行响应,否则浏览将不会通过凭证。
你可以尝试,并迫使401响应代码,并设置头
WWW-Authenticate: Basic realm="SomethingGoesHere"
然后,浏览器会提示输入用户名和密码的用户,但会在明文发送到浏览器的(Base64编码),如下所示:
Authorization: Basic YnJpYW5iOmJvYmJ5Ym95
其从Base64的转换为:
brianb:bobbyboy
我不知道您是否可以访问您的ASP页面的授权标头,或者如果Web服务器会因为有人试图向其传递凭据而不愿意时向其发送令人惊讶的信息,但可能值得一个尝试...
用户和密码应在base64编码之前进行散列处理,除非您希望有人嗅探流量以base64解码您的凭证。 – booyaa 2013-08-29 11:54:15