Domanda

Voglio sviluppare un sito Web in ASP classico che utilizza l'autenticazione HTTP su un database o un elenco di password che è sotto il controllo dello script. Idealmente, la soluzione non dovrebbe coinvolgere componenti o impostazioni IIS poiché lo script dovrebbe essere eseguibile in un ambiente ospitato.

Qualsiasi indizio / codice è molto apprezzato.

È stato utile?

Soluzione

È possibile eseguire l'autenticazione di base HTTP in VBScript ASP classico puro.

Avrai bisogno di qualcosa per decodificare la base 64. Ecco una pura implementazione VBScript . Dovrai inoltre assicurarti che nella configurazione di IIS disattivi " Autenticazione di base " e " Autenticazione integrata di Windows " poiché questi interferiranno con ciò che ottieni nell'intestazione HTTP_AUTHORIZATION.

Ecco un'implementazione di esempio che fa eco al nome utente e alla password.

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

Associare il nome utente e la password a qualcosa di significativo viene lasciato come esercizio per il lettore.

Altri suggerimenti

Per definizione, l'autenticazione HTTP è qualcosa che è richiesto dal Web Server, dubito che troverai una soluzione che non comporti l'applicazione di Impostazioni IIS.

Il browser si connetterà al tuo sito Web e, a meno che il tuo server non risponda con un codice di risposta HTTP HTTP / 1.1 401 non autorizzato, la navigazione non passerà attraverso le credenziali.

Potresti provare a forzare un codice di risposta di 401 e impostare l'intestazione

   WWW-Authenticate: Basic realm="SomethingGoesHere"

Quindi il browser richiederà all'utente nome utente e password, ma verrà inviato al browser con testo in chiaro (codificato Base64), in questo modo:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95

Che viene tradotto da Base64 a:

brianb:bobbyboy

Non so se avrai accesso all'intestazione dell'autorizzazione dalla tua pagina ASP, o se il Web Server andrà fuori di testa perché qualcuno sta cercando di passargli le credenziali quando non se lo aspetta, ma potrebbe vale la pena provare ...

Ciao, stai cercando di ottenere un elenco di utenti da un database o utilizzare le autorizzazioni di rete sul server HTTP?

Se si utilizza un database, utilizzare ODBC e DSN

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

Se si desidera una finestra di dialogo della password (dal server), sarà necessario modificare le impostazioni IIS per una buona guida a questo.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top