Pergunta

Quero desenvolver um site no ASP Classic que use a autenticação HTTP em um banco de dados ou lista de senha que esteja sob o controle do script. Idealmente, a solução não deve envolver componentes ou configurações do IIS, pois o script deve ser executado em um ambiente hospedado.

Qualquer pista/código profundamente apreciada.

Foi útil?

Solução

É possível fazer autenticação básica HTTP no Pure Classic ASP VBScript.

Você precisará de algo para decodificar a base 64. Aqui está uma implementação pura do VBScript. Você também precisará garantir que, na sua configuração do IIS, desative "autenticação básica" e "autenticação integrada do Windows", pois elas interferirão no que você recebe no cabeçalho HTTP_Authorization.

Aqui está uma implementação de amostra que apenas ecoa de volta o nome do usuário e a senha.

<%@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
%>

Vincular o nome de usuário e a senha de algo significativo é deixado como um exercício para o leitor.

Outras dicas

Por definição, a autenticação HTTP é algo que é solicitado pelo servidor da web, duvido que você encontre uma solução que não resulte em configurações de IIS sendo aplicadas.

O navegador da Web se conectará ao seu site e, a menos que seu servidor responda com um código de resposta HTTP HTTP/1.1 401 não autorizado, a navegação não passará pelas credenciais.

Você pode tentar forçar um código de resposta de 401 e definir o cabeçalho

   WWW-Authenticate: Basic realm="SomethingGoesHere"

Em seguida, o navegador solicitará ao usuário nome de usuário e senha, mas será enviado em texto claro para o navegador (base64 codificado), assim:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95

Que é traduzido de Base64 para:

brianb:bobbyboy

Não sei se você terá acesso ao cabeçalho da autorização da sua página ASP, ou se o servidor da web vai surtar porque alguém está tentando transmitir credenciais quando não está esperando, mas pode valer um tentar...

Olá, você está tentando obter uma lista de usuários de um banco de dados ou usar permissões baseadas em rede no servidor HTTP?

Se você estiver usando um banco de dados, use ODBC e DSN

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

Se você deseja uma caixa de diálogo de senha (do servidor), precisará alterar as configurações do IIS para um bom guia para isso ..

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top