Apache mod_auth_tkt et Python AuthTkt

Fraîcheur des informations

Contexte

À propos des documents associés

Tout d'abord, c'est un document de pêche pour avoir un aperçu de "l'authentification par ticket" fourni par mod_auth_tkt. Cependant, il n'y a pas beaucoup de documentation sur les deux modules.

Cependant, les informations contenues dans le cookie sont simples, donc cela ne semble pas trop compliqué.

C'est la principale source d'information ...

Dans cet article, je n'écrirai qu'un aperçu.

mod_auth_tkt / AuthTkt est bon!

L'émetteur du ticket (cette fois le site django) et le consommateur du ticket (cette fois un répertoire spécifique dans Apache) Partagez ce qui suit:

Tout en partageant ces deux, l'émetteur du billet

Enregistrez le ticket en tant que cookie basé sur. Ils sont alignés, mais pour bien l'expliquer, "secret commun" et "algorithme de hachage" sont nécessaires lors de la création d'un ticket. Par contre, "nom d'utilisateur" et "adresse IP" sont les informations contenues dans le ticket (cookie).

Apache utilise le nom du cookie et un secret commun pour vérifier le ticket et

Confirmez par exemple et effectuez l'authentification / l'autorisation.

Vous pouvez spécifier plusieurs jetons des deux côtés (ce n'est pas nécessaire). Si le consommateur du jeton "admin" attend L'émetteur doit avoir le jeton «admin» intégré dans le ticket. Je pense que nous pouvons réaliser un certain contrôle d'accès. (Cependant, comme je ne peux avoir qu'un seul secret commun, j'ai l'impression que quelque chose est fou même si je fais une ACL Gatchigachi avec ça.)

Il semble que vous puissiez spécifier en détail la plage de validité et la date d'expiration du ticket, Ce n'est pas la portée de cet article.

Préparer l'environnement

# apt-get install mod_auth_tkt
# pip install -U AuthTkt

Exemple de configuration côté Apache

Il y a pas mal d'exemples sur la page de manuel de mod_auth_tkt, donc Je pense qu'il vaut mieux le voir ...

TKTAuthSecret "Ukaga"

<Directory /opt/griflet/data/result/>
    AuthType None
    TKTAuthLoginURL http://example.com/django/issue_ticket
    TKTAuthDomain example.com
    TKTAuthDebug 3
</Directory>

Pour Debian, il y a une section dans /etc/apache2/mods-enabled/auth_tkt.conf qui devrait écrire un TKTAuthSecret.

Si TKTAuthDebug est attaché, une erreur apparaîtra dans error.log. Toutes les explications sont jetées sur la page de manuel.

exemple d'implémentation côté django

En particulier, il est fort possible que les paramètres des cookies soient plutôt bâclés, mais pour le moment. (urls.py ou tout le reste est omis)

@login_required
def issue_ticket(request):
    user = request.user
    # http://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django
    ip = utils.get_client_ip(request)
    token = authtkt.AuthTicket(TKT_AUTH_SECRET,
                               user.username,
                               ip,
                               tokens=['user'])
    # TODO:Redirigeons
    response = render(request, '{}/hello.html'.format(NAMESPACE), {})
    response.set_cookie('auth_tkt', token.cookie_value(),
                        domain=TKT_AUTH_DOMAIN)
    return response

Bien qu'il soit écrit en TODO, lorsque vous accédez à "TKTAuthLoginURL" sans ticket, vous serez redirigé vers cette page avec l'URL de retour "back" définie dans la requête. Redirigeons pour l'utilisateur

référence

Il y a beaucoup de modules déroutants, en particulier du côté de l'implémentation Python

Veuillez décider lequel est le meilleur. Cependant, si les spécifications côté consommateur (Apache) n'ont pas changé, il ne devrait y avoir pratiquement aucune différence dans ce qu'il faut faire.

Les défis que j'ai ressentis

Il semble qu'il y ait beaucoup de gens qui pensent que la petite échelle à laquelle nous pensons cette fois est acceptable, mais que c'est une grande échelle.

Résumé

Il sera plus facile de savoir si vous vous souvenez que vous pouvez également le faire.

Post-scriptum (10/01/2014)

À la suite d'un peu plus de recherche, je signale également que cela ne correspondait pas à mon objectif.

Par exemple, supposons que vous construisiez un site Web django qui crée et disparaît dynamiquement plusieurs projets (par exemple, la gestion de projet). À ce moment-là, je souhaite émettre différents types de tickets pour chaque projet et modifier les fichiers téléchargeables en fonction du type de ticket.

Cela ne peut pas être fait avec le mod_auth_tkt d'Apache seul.

Plus précisément, l'implémentation actuelle de mod_auth_tkt n'autorise en aucune façon les variables dans TKTAuthToken. Même si vous définissez la variable d'environnement Apache avec SetEnvIf, il semble que vous ne puissiez pas l'obtenir au moins dans la version vérifiée. J'ai regardé le code source, mais encore une fois, il n'y a pas de logique pour le gérer.

J'ai entendu parler de X-SendFile, alors je vais l'essayer.

Recommended Posts

Apache mod_auth_tkt et Python AuthTkt
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
[python] Compresser et décompresser
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
Ruby, Python et carte
Intégrez Apache et Tomcat
entrée et sortie python
Python et Ruby se séparent
Python asyncio et ContextVar
Étudiez l'échange de données Java et Python avec Apache Arrow
Chiffrement et déchiffrement avec Python
Nombre de mots avec Apache Spark et python (Mac OS X)
3-3, chaîne Python et code de caractère
Série Python 2 et série 3 (édition Anaconda)
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
Indentation Python et format de chaîne
division des nombres réels python (/) et division des nombres entiers (//)
Å (Ongustorome) et NFC @ Python
Python3 + Django ~ Mac ~ avec Apache
Apprenez à connaître les packages et les modules Python
# 2 [python3] Séparation et commentaire
Copie superficielle Python et copie profonde
Mémo tranche python et rubis
Installation de Python et grammaire de base
J'ai comparé Java et Python!
Copie superficielle Python et copie profonde
Défis et opportunités Apache Flink
À propos de Python, len () et randint ()
À propos de la date et du fuseau horaire Python
Apache sur macports, Python 3.3 + mod_wsgi3.4 sur non-macports
Installez Python 3.7 et Django 3.0 (CentOS)
Construction d'environnement Python et TensorFlow
Variables de classe et d'instance Python
Syntaxe Ruby et Python ~ branch ~
[Python] Python et sécurité-① Qu'est-ce que Python?
Pile et file d'attente en Python
métaclasse python et déclaration sqlalchemy
Implémentation de Fibonacci et des nombres premiers (python)
bases de python: conditions et itérations
Opérateur de bits Python et somme logique
Module de débogage et de test Python
Liste Python et tapples et virgules
Variables Python et ID d'objet
Touchez Apache Beam avec Python
Notation et générateur d'inclusion de liste Python
À propos de Python et des expressions régulières
python avec pyenv et venv
Unittest et CI en Python
Description et implémentation de Maxout (Python)
[python] Obtenir le quotient et le surplus
Fonctions de tri et de comparaison Python 3
[Python] Recherche de priorité de profondeur et recherche de priorité de largeur
Identité et équivalence: is et == en Python
Installation source et installation de Python
Python ou et et opérateur trap
Défiez Python3 et Selenium Webdriver