2016-05-04 9 views
1

Ich entwickle eine einfache Web-Anwendung, die in Flask geschrieben wurde, um die Browser-Authentifizierung von Grund auf zu verstehen. Als ersten Schritt habe ich die Standardauthentifizierung nur den anonymen Zugriff auf die Verwendung:Wie wird die dauerhafte Standardauthentifizierung mit reinem Javascript festgelegt?

from functools import wraps 
from flask import request, Response 


def check_auth(username, password): 
    """This function is called to check if a username/
    password combination is valid. 
    """ 
    return username == 'admin' and password == 'secret' 

def authenticate(): 
    """Sends a 401 response that enables basic auth""" 
    return Response(
    'Could not verify your access level for that URL.\n' 
    'You have to login with proper credentials', 401, 
    {'WWW-Authenticate': 'Basic realm="Login Required"'}) 

def requires_auth(f): 
    @wraps(f) 
    def decorated(*args, **kwargs): 
     auth = request.authorization 
     if not auth or not check_auth(auth.username, auth.password): 
      return authenticate() 
     return f(*args, **kwargs) 
    return decorated 

Quelle: http://flask.pocoo.org/snippets/8/

Es funktioniert gut, so weit wie Sicherheit betrifft. Aber das Problem ist, dass es mich nach einem Benutzernamen und einem Passwort fragt. Sobald ich den Benutzernamen und das Passwort eingegeben habe, ist die Autorisierung persistent. Also meine Frage ist:

1) Wie ist das die Autorisierung persistent? Ist die Basisautorisierung während der gesamten Browsersitzung im Anforderungsheader gespeichert? Ich kann sehen, dass ich, wenn ich ein Inkognito-Fenster öffne, es erneut nur einmal eingeben muss.

2) Um es benutzerfreundlicher zu machen, kann ich eine Anmeldeseite haben, die den oben genannten Job ausführt, d. H. Eine dauerhafte Basisautorisierung durch die Browsersitzung unter Verwendung von reinem Javscript mit einem Browser-Popup einrichten?

Antwort

1

Sie sollten ein Tool wie Firebug herunterladen und beobachten Sie die Header auf Ihren Anfragen hin und her gehen. Dies wird aufschlussreich sein, wie sich Ihr Browser ohne Benutzername und Passwort authentifiziert.

Sofern ich Flask in seiner Gesamtheit nicht falsch verstehe. All dies Code tut ein 401 mit einer grundlegenden Anforderung Herausforderung Senden in dieser Linie

{'WWW-Authenticate': 'Basic realm="Login Required"'}) 

Was macht einen Antwort-Header sendet. Wenn der Browser dies bekommt, sieht er Basic als das Authentifizierungsprotokoll und startet einen Dialog. In diesem Dialogfeld wird der Browser angezeigt und nach einem Kennwort gefragt, damit er sich bei der Remote-Ressource authentifizieren kann. Nachdem Sie dies getan haben, wird es sich für die Lebensdauer des Tabs oder Browsers (abhängig vom Browser selbst) erinnern und die Authentifizierung bereits senden. Here ist eine Diskussion über die Herstellung Browser vergessen, dass (siehe Schließung umständlich)

Was Frage Nummer zwei ... es ist im Grunde ein Duplikat this

Aber zusammenfassend, müssen Sie den Client für Anmeldeinformationen fragen und führen Sie dann die Verhandlung aus. Einige Frameworks ermöglichen eine stille Standardauthentifizierung. Also, wenn Sie den Benutzernamen/das Passwort bekommen, Base64 encode es, schieben Sie es in die Kopfzeile, dann hat der Server die Informationen benötigt zu authentifizieren. Andere Frameworks verwenden ein Token, um die Authentifizierung für die Sitzung aufrechtzuerhalten. Sie können also eine ungeschützte Ressource /login.html haben und dann das Formular an den Login-Endpunkt senden. This scheint Flaschen-basierte Anmeldeseiten zu umfassen.

Natürlich sollte dies nur über https etc.

erfolgen