Autenticazione HTTP (di base o digest) in ASP Classic tramite IIS [chiuso]
-
03-07-2019 - |
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.
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.