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.

¿Fue útil?

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 ...

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top