Table des matières
La partie En-tête est un json qui décrit les métadonnées de JWT, généralement comme suit
Générer le token
Maison développement back-end Tutoriel Python Introduction aux principes JWT et aux applications simples (avec code)

Introduction aux principes JWT et aux applications simples (avec code)

Mar 29, 2019 am 10:53 AM
jwt python

Cet article vous apporte une introduction aux principes de JWT et aux applications simples (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Connexion par authentification JWT

Récemment, je travaille sur un système d'audit, l'authentification de connexion JWT est utilisée pour la connexion en arrière-plan

Qu'est-ce que JWT

<.>Le jeton Web Json (JWT), selon la définition du site officiel, est un standard ouvert basé sur JSON mis en œuvre pour transférer les revendications entre les environnements d'applications réseau. Le jeton est conçu pour être compact et sécurisé, particulièrement adapté aux sites distribués. Signature unique. sur scénario. Les revendications JWT sont généralement utilisées pour transférer des informations d'identité d'utilisateur authentifiées entre les fournisseurs d'identité et les fournisseurs de services afin d'obtenir des ressources du serveur de ressources. Certaines informations de revendication supplémentaires nécessaires à d'autres logiques métier peuvent également être ajoutées. pour authentification ou crypté.

Pourquoi utiliser JWT

Ceci est principalement comparé à la session traditionnelle. La session traditionnelle doit enregistrer certaines informations de connexion côté serveur, généralement en mémoire, et le serveur back-end est un. cluster, etc. Dans une situation distribuée, les autres hôtes ne sauvegardent pas ces informations, ils doivent donc tous être vérifiés via un hôte fixe. Si le nombre d'utilisateurs est important, il est facile de former un goulot d'étranglement au point d'authentification, ce qui crée un goulot d'étranglement. l'application est difficile à développer.

Principe JWT

JWT se compose de trois parties, séparées par des points. Il ressemble à ceci. Le jeton JWT lui-même n'a pas d'espaces, de sauts de ligne, etc. Ce qui suit est traité pour des raisons d'esthétique

1. En-tête
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19.
m0HD1SUd30TWKuDQImwjIl9a-oWJreG7tKVzuGVh7e4
Copier après la connexion
La partie En-tête est un json qui décrit les métadonnées de JWT, généralement comme suit

alg indique la signature utilisée Algorithme, la valeur par défaut est HMAC SHA256, écrit HS256, tye représente le type de ce jeton, le jeton JWT utilise JWT uniformément, le jeton généré par l'en-tête ci-dessus est
{
  "alg": "HS256",
  "typ": "JWT"
}
Copier après la connexion

2. >Stipule officiellement 7 champs, expliqués comme suit
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
Copier après la connexion
iss : l'émetteur, vous pouvez renseigner l'ID pour générer ce token, etc. Paramètres optionnels

sub : qu'est-ce que le JWT pour les clients, ils peuvent stocker l'identifiant du compte de l'utilisateur, etc. Facultatif
  • aud : Le destinataire du JWTtoken peut renseigner l'URL de l'interface qui génère ce jeton, mais ce n'est pas obligatoire
  • exp : Heure d'expiration, horodatage, entier, paramètres facultatifs
  • iat : heure à laquelle le token a été généré, heure unix, horodatage, paramètres facultatifs
  • nbf (Not Before) : indique que le token est ici Non disponible avant l'heure, ce qui signifie que la vérification a échoué, facultatif
  • jti : ID JWT, principalement utilisé pour générer un jeton unique, paramètres facultatifs
  • En plus des officiels, nous pouvons également définir certains champs personnalisés, mais étant donné que BASE64 est réversible, ne mettez pas d'informations sensibles
  • Voici un exemple

La charge utile ci-dessus est générée après le cryptage BASE64. Le jeton est

{
  "iss": "labs_purifier-api-panel",
  "iat": 1552975878,
  "exp": 1555567878,
  "aud": "http://ff-labs_purifier-api-test.fenda.io/prod/v1/auth/jwt",
  "sub": "1501385611884704",
  "scopes": [
    "register",
    "open",
    "login",
    "panel"
  ]
}
Copier après la connexion
3. Signature (Signature)

La signature est le cryptage des deux jetons générés dans les deux parties précédentes. La méthode de cryptage utilisée est précisée dans l'en-tête, ici c'est HS256. La clé secrète est requise et ne peut pas être divulguée. Le processus général est le suivant :
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19
Copier après la connexion
Utilisation du jeton JWT

Le jeton JWT est généralement placé dans l'en-tête de la requête, mais bien sûr, il peut également être placé dans le cookie, mais il ne peut pas être placé dans le cookie sur plusieurs domaines, par exemple :
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
Copier après la connexion

Génération et vérification simples de JWT en Python

bibliothèque jwt
Authorization: Bearer &lt;token&gt;
Copier après la connexion

Générer le token

Jeton de vérification

def create_token():
    payload={
              "iss": "labs_purifier-api-panel",
              "iat": 1552975878,
              "exp": 1555567878,
              "aud": Config.AUDIENCE,
              "sub": "1501385611884704",
              "scopes": [
                "register",
                "open",
                "login",
                "panel"
              ]
            }
    token = jwt.encode(payload, Config.SECRET_KEY, algorithm='HS256')
    return True, {'access_token': token}
Copier après la connexion
A noter que si le paramètre aud est ajouté lors de la génération, le paramètre audience doit également être utilisé lors de la vérification, et la valeur must Idem

Cet article est terminé ici Pour d'autres contenus passionnants, vous pouvez faire attention à la colonne
def verify_jwt_token(token):
    try:
        payload = jwt.decode(token, Config.SECRET_KEY,
                             audience=Config.AUDIENCE,
                             algorithms=['HS256'])
    except (ExpiredSignatureError, DecodeError):
        return False, token
    if payload:
        return True, jwt_model
Copier après la connexion
Tutoriel vidéo Python

du site Web PHP chinois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quels sont les avantages et les inconvénients des modèles ? Quels sont les avantages et les inconvénients des modèles ? May 08, 2024 pm 03:51 PM

Quels sont les avantages et les inconvénients des modèles ?

Comment télécharger Deepseek Xiaomi Comment télécharger Deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

Comment télécharger Deepseek Xiaomi

Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs Jul 01, 2024 am 07:22 AM

Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs

Pour seulement 250$, le directeur technique de Hugging Face vous apprend étape par étape comment peaufiner Llama 3 Pour seulement 250$, le directeur technique de Hugging Face vous apprend étape par étape comment peaufiner Llama 3 May 06, 2024 pm 03:52 PM

Pour seulement 250$, le directeur technique de Hugging Face vous apprend étape par étape comment peaufiner Llama 3

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM May 06, 2024 pm 04:43 PM

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM

Un guide complet sur le débogage et l'analyse des fonctions Golang Un guide complet sur le débogage et l'analyse des fonctions Golang May 06, 2024 pm 02:00 PM

Un guide complet sur le débogage et l'analyse des fonctions Golang

Comment lui demandez-vous Deepseek Comment lui demandez-vous Deepseek Feb 19, 2025 pm 04:42 PM

Comment lui demandez-vous Deepseek

Comment enregistrer la fonction d'évaluation Comment enregistrer la fonction d'évaluation May 07, 2024 am 01:09 AM

Comment enregistrer la fonction d'évaluation

See all articles