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.
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.
# apt-get install mod_auth_tkt
# pip install -U AuthTkt
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.
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
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.
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.
Il sera plus facile de savoir si vous vous souvenez que vous pouvez également le faire.
À 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