Autenticación HTTP (Basic o Digest) en ASP Classic a través de IIS [cerrado]
-
03-07-2019 - |
Pregunta
Quiero desarrollar un sitio web en ASP clásico que use la autenticación HTTP en una base de datos o lista de contraseñas que esté bajo el control del script. Lo ideal es que la solución no incluya componentes o configuraciones de IIS, ya que la secuencia de comandos debe ejecutarse en un entorno hospedado.
Cualquier pista / código muy apreciado.
Solución
Es posible realizar la autenticación básica HTTP en ASP VBScript clásico puro.
Necesitará algo para decodificar la base 64. Aquí hay una implementación de VBScript pura . También deberá asegurarse de que en la configuración de IIS desactive " Autenticación básica " y " Autenticación integrada de Windows " ya que estos interferirán con lo que obtienes en el encabezado HTTP_AUTHORIZATION.
Aquí hay una implementación de muestra que simplemente devuelve el nombre de usuario y la contraseña.
<%@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
%>
Conectar el nombre de usuario y la contraseña a algo significativo se deja como un ejercicio para el lector.
Otros consejos
Por definición, la autenticación HTTP es algo que solicita el servidor web, dudo que encuentre una solución que no dé lugar a que no se aplique la configuración de IIS.
El navegador web se conectará a su sitio web y, a menos que su servidor responda con un código de respuesta HTTP HTTP / 1.1 401 No autorizado, el navegador no pasará por las credenciales.
Puedes intentar forzar un código de respuesta de 401 y establecer el encabezado
WWW-Authenticate: Basic realm="SomethingGoesHere"
Luego, el navegador le pedirá al usuario el nombre de usuario y la contraseña, pero se enviará por texto sin cifrar al navegador (codificado en base64), de esta forma:
Authorization: Basic YnJpYW5iOmJvYmJ5Ym95
Lo que se traduce de Base64 a:
brianb:bobbyboy
No sé si tendrá acceso al encabezado de Autorización desde su página ASP, o si el Servidor Web se volverá loco porque alguien está intentando pasarle credenciales cuando no lo espera, pero podría merece la pena intentarlo ...
Hola, ¿está intentando obtener una lista de usuarios de una base de datos o usar permisos basados ??en la red en el servidor HTTP?
Si está utilizando una base de datos, utilice ODBC y DSN
Dim DatabaseObject1
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection")
DatabaseObject1.Open("DSN=DSNname;")
Si desea un cuadro de diálogo de contraseña (del servidor), deberá modificar la configuración de IIS para obtener una buena guía de esto ...