Question

Je souhaite développer un site Web en ASP classique qui utilise l'authentification HTTP sur une base de données ou sur une liste de mots de passe contrôlée par le script. Idéalement, la solution ne devrait comporter aucun composant ni paramètre IIS, car le script devrait pouvoir être exécuté dans un environnement hébergé.

Tous les indices / codes sont très appréciés.

Était-ce utile?

La solution

Il est possible de faire l’authentification HTTP de base en ASP VBScript classique pur.

Vous aurez besoin de quelque chose pour décoder la base 64. Voici une implémentation purement VBScript . Vous devrez également vous assurer que, dans votre configuration IIS, vous désactivez "Authentification de base". et " Authentification Windows intégrée " car ceux-ci vont interférer avec ce que vous obtenez dans l'en-tête HTTP_AUTHORIZATION.

Voici un exemple d'implémentation qui renvoie simplement le nom d'utilisateur et le mot de passe.

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

Attacher le nom d'utilisateur et le mot de passe à quelque chose de significatif reste un exercice pour le lecteur.

Autres conseils

Par définition, l’authentification HTTP est une requête du serveur Web. Je doute que vous trouviez une solution qui ne donne pas lieu à l’application de paramètres IIS.

Le navigateur Web se connectera à votre site Web et, à moins que votre serveur ne reçoive un code de réponse HTTP HTTP / 1.1 401 non autorisé, la navigation ne passera pas par les informations d'identification.

Vous pouvez essayer de forcer un code de réponse de 401 et définir l'en-tête

   WWW-Authenticate: Basic realm="SomethingGoesHere"

Ensuite, le navigateur demandera à l'utilisateur un nom d'utilisateur et un mot de passe, mais sera envoyé au navigateur en texte clair (codé en base64), comme suit:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95

Ce qui est traduit de Base64 en:

brianb:bobbyboy

Je ne sais pas si vous aurez accès à l'en-tête Authorization de votre page ASP ou si le serveur Web va paniquer parce que quelqu'un essaie de lui transmettre des informations d'identification alors qu'il ne l'attend pas, mais peut vaut la peine d'essayer ...

Bonjour, essayez-vous d'obtenir une liste d'utilisateurs d'une base de données ou d'utiliser des autorisations réseau sur le serveur HTTP?

Si vous utilisez une base de données, utilisez ODBC et DSN

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

Si vous souhaitez une boîte de dialogue de mot de passe (du serveur), vous devrez modifier les paramètres IIS pour obtenir un bon guide.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top