Authentification de base avec mot de passe crypté (.htpasswd) avec bouteille en python

Stockez le nom d'utilisateur et le mot de passe dans ".htpasswd" et supposez que le mot de passe est déjà chiffré. Cette fois, l'authentification de base sera utilisée lors de l'accès à l'écran de gestion "http: // hogehoge / manage". Pour la description de «@auth_basic (check)», reportez-vous à http://qiita.com/yubessy/items/33789eccb35b659b0b4e. Ce qui est nouveau, c'est le cryptage SAH1.

Ci-dessous, la structure des dossiers

/
├── app
│   └── app.py
├── config
│   └─── .htpasswd
└── views
    └── manage.j2

Générez un mot de passe à l'avance et stockez-le dans .htpasswd. Les options de htpasswd sont c: nouvelle création de fichier, s: sha1 (format de cryptage). Le nom d'utilisateur et le mot de passe sont enregistrés dans le format ci-dessus (nom d'utilisateur + ":" + "format crypté" + mot de passe crypté).

$ htpasswd -csb .htpasswd user password
$ cat .htpasswd 
user:{SHA}H9WJLeNwKEfNwYPyPeiv9nuZoxk=

En python, ce qui précède est lu à partir du fichier et comparé à la valeur entrée par l'utilisateur, il est donc nécessaire de construire une chaîne de caractères au format ci-dessus avec la valeur entrée par l'utilisateur.

Les informations lues dans le fichier ne correspondaient pas dans la comparaison telles qu'elles étaient, probablement parce qu'il y avait un code de saut de ligne, donc le traitement de découpage est effectué par strip ().

from bottle import route, run, request, auth_basic
import hashlib
import base64
from bottle imp

#Ajouter un chemin de modèle
TEMPLATE_PATH.append("../views")
ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) #Chemin absolu vers le dossier où se trouve ce script

def check(username, password):
    #Lecture des paramètres côté serveur
    f = open(ROOT_PATH + '/../config/.htpasswd', 'r')
    auth_check_word = f.readline() #Données de ligne du fichier 1 renvoyées
    f.close()
    #Chargement des informations de connexion
    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')

Pour être honnête, je ne vérifie pas les meilleures pratiques en matière d'authentification des utilisateurs. Cette fois, nous n'avions besoin que d'un seul écran de gestion pour l'administrateur, nous l'avons donc abordé ci-dessus. Comment les autres le mettent-ils en œuvre? Avez-vous un Active Directory?

Recommended Posts

Authentification de base avec mot de passe crypté (.htpasswd) avec bouteille en python
Authentification BASIC avec bouteille Python
Envoyer HTTP avec l'en-tête d'authentification de base en Python
Scraping avec Selenium en Python (Basic)
Générer un mot de passe pour le manuel avec python
Point addictif lors du passage par proxy http avec authentification de base en python
Obtenez une authentification de base avec CloudFront Lambda @ Edge avec Python 3.8
Expérimentez avec les règles de mot de passe NIST 800-63B en Python
Créer une image avec des caractères avec python (japonais)
Envoyer un e-mail avec Excel en pièce jointe en Python
Tri de base en Python
Comment créer un téléchargeur d'image avec Bottle (Python)
Grattage au sélénium en Python
Refactoring appris avec Python (Basic)
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
Débogage avec pdb en Python
Créer un œuf avec python
[Python] Utilisation d'OpenCV avec Python (basique)
Gérer les sons en Python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
Créer une fonction d'authentification à l'aide de django-allauth et CustomUser dans Django
[Python] [SQLite3] Exploiter SQLite avec Python (basique)
Boîte de mot de passe facile en Python
Gestion des mots de passe avec python: trousseau de clés
Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle
Connectez-vous à Raspberry PI avec ssh sans mot de passe (authentification par clé)
Émission de jetons d'authentification Firebase en Python et validation de jetons avec Fast API
Reconnaissance des nombres dans les images avec Python
Découpez une image avec python
GOTO en Python avec Sublime Text 3
Travailler avec LibreOffice en Python: import
Téléchargement de fichiers implémenté avec Python + Bottle
Analyse CSS avec cssutils en Python
Ecrire un serveur HTTP / 2 en Python
Numer0n avec des objets fabriqués avec Python
Ouvrez UTF-8 avec BOM en Python
[Python] Connaissances de base utilisées dans AtCoder
Développons un algorithme d'investissement avec Python 2
Décrypter les fichiers cryptés avec OpenSSL avec Python 3
J'ai envoyé un SMS avec Python
Utiliser rospy avec virtualenv dans Python3
Authentification de base, authentification Digest avec Flask
Utiliser Python mis en pyenv avec NeoVim
1. Statistiques apprises avec Python 1-1. Statistiques de base (Pandas)
Heatmap avec dendrogramme en Python + matplotlib
[Python] Générer un mot de passe avec Slackbot
Lire des fichiers en parallèle avec Python
Utiliser OpenCV avec Python 3 dans Window
Dessinez une illustration avec Python + OpenCV
Jusqu'à traiter de python dans Atom
Python in est aussi un opérateur
[Python] Envoyez des e-mails avec Outlook
Démarrez avec Python avec Blender
Une alternative à `pause` en Python