Grundlegende Authentifizierung mit verschlüsseltem Passwort (.htpasswd) mit Flasche in Python

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

Grundlegende Authentifizierung mit verschlüsseltem Passwort (.htpasswd) mit Flasche in Python
BASIC-Authentifizierung mit Python-Flasche
Senden Sie HTTP mit dem Standardauthentifizierungsheader in Python
Scraping mit Selen in Python (Basic)
Passwort für Lehrbuch mit Python generieren
Suchtpunkt beim Durchlaufen des http-Proxys mit grundlegender Authentifizierung in Python
Erreichen Sie eine grundlegende Authentifizierung mit CloudFront Lambda @ Edge mit Python 3.8
Experimentieren Sie mit NIST 800-63B-Kennwortregeln in Python
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Senden Sie eine E-Mail mit Excel in Python
Grundlegende Sortierung in Python
So erstellen Sie einen Bild-Uploader mit Bottle (Python)
Schaben mit Selen in Python
Mit Python erlerntes Refactoring (Basic)
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
Debuggen mit pdb in Python
Ein Ei mit Python erstellen
[Python] Verwenden von OpenCV mit Python (Basic)
Umgang mit Sounds in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Erstellen Sie eine Authentifizierungsfunktion mit django-allauth und CustomUser in Django
[Python] [SQLite3] Betreiben Sie SQLite mit Python (Basic)
Einfaches Passwortfeld in Python
Passwortverwaltung per Python: Schlüsselbund
Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht
Melden Sie sich mit ssh ohne Passwort bei Raspberry PI an (Schlüsselauthentifizierung)
Ausgabe von Firebase-Authentifizierungstoken in Python und Token-Validierung mit Fast API
Zahlenerkennung in Bildern mit Python
Schneiden Sie ein Bild mit Python aus
GOTO in Python mit erhabenem Text 3
Arbeiten mit LibreOffice in Python: Importieren
Implementierter Dateidownload mit Python + Bottle
CSS-Analyse mit cssutils in Python
Schreiben Sie einen HTTP / 2-Server in Python
Numer0n mit Elementen, die mit Python erstellt wurden
Öffnen Sie UTF-8 mit Stückliste in Python
[Python] Grundkenntnisse in AtCoder
Lassen Sie uns mit Python 2 einen Investitionsalgorithmus entwickeln
Mit OpenSSL mit Python 3 verschlüsselte Dateien entschlüsseln
Ich habe eine SMS mit Python gesendet
Verwenden Sie rospy mit virtualenv in Python3
Basisauthentifizierung, Digest-Authentifizierung mit Flask
Verwenden Sie Python in pyenv mit NeoVim
1. Mit Python 1-1 gelernte Statistiken. Grundlegende Statistiken (Pandas)
Heatmap mit Dendrogramm in Python + Matplotlib
[Python] Generiere ein Passwort mit Slackbot
Lesen Sie Dateien parallel zu Python
Verwenden Sie OpenCV mit Python 3 in Window
Zeichnen Sie eine Illustration mit Python + OpenCV
Bis zum Umgang mit Python in Atom
Python in ist auch ein Operator
[Python] Mail mit Outlook senden
Beginnen Sie mit Python mit Blender
Eine Alternative zu "Pause" in Python