Speichern Sie den Benutzernamen und das Passwort in ".htpasswd" und gehen Sie davon aus, dass das Passwort bereits verschlüsselt ist. Dieses Mal wird die Basisauthentifizierung verwendet, wenn auf den Verwaltungsbildschirm "http: // hogehoge / manage" zugegriffen wird. Die Beschreibung von "@auth_basic (check)" finden Sie unter http://qiita.com/yubessy/items/33789eccb35b659b0b4e. Neu ist die SAH1-Verschlüsselung.
Unten die Ordnerstruktur
/
├── app
│ └── app.py
├── config
│ └─── .htpasswd
└── views
└── manage.j2
Generieren Sie im Voraus ein Passwort und speichern Sie es in .htpasswd. Die Optionen von htpasswd sind c: Erstellung neuer Dateien, s: sha1 (Verschlüsselungsformat). Der Benutzername und das Passwort werden im obigen Format gespeichert (Benutzername + ":" + "verschlüsseltes Format" + verschlüsseltes Passwort).
$ htpasswd -csb .htpasswd user password
$ cat .htpasswd
user:{SHA}H9WJLeNwKEfNwYPyPeiv9nuZoxk=
In Python wird das Obige aus der Datei gelesen und mit dem vom Benutzer eingegebenen Wert verglichen. Daher muss eine Zeichenfolge im obigen Format mit dem vom Benutzer eingegebenen Wert erstellt werden.
Die aus der Datei gelesenen Informationen stimmten im Vergleich nicht überein, wahrscheinlich weil ein Zeilenvorschubcode vorhanden war, sodass die Trimmverarbeitung von strip () ausgeführt wird.
from bottle import route, run, request, auth_basic
import hashlib
import base64
from bottle imp
#Vorlagenpfad hinzufügen
TEMPLATE_PATH.append("../views")
ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) #Absoluter Pfad zu dem Ordner, in dem sich dieses Skript befindet
def check(username, password):
#Serverseitige Einstellungen lesen
f = open(ROOT_PATH + '/../config/.htpasswd', 'r')
auth_check_word = f.readline() #Datei 1 Zeilendaten zurückgegeben
f.close()
#Anmeldeinformationen laden
hs= hashlib.sha1()
hs.update(password.encode("utf-8"))
login_word = username + ":{SHA}" + str(base64.b64encode(hs.digest()).decode("utf-8"))
return auth_check_word.strip() ==login_word.strip()
@route("/manage")
@auth_basic(check)
def manage():
return template('manage.j2')
Um ehrlich zu sein, überprüfe ich nicht die Best Practices für die Benutzerauthentifizierung. Dieses Mal brauchten wir nur einen Verwaltungsbildschirm, den der Administrator verwenden konnte. Deshalb haben wir ihn oben angesprochen. Wie setzen andere Leute es um? Haben Sie ein Active Directory?
Recommended Posts