Maison >développement back-end >Tutoriel Python >Introduction aux principes JWT et aux applications simples (avec code)
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 JWTCeci 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 JWTJWT 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êteeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19. m0HD1SUd30TWKuDQImwjIl9a-oWJreG7tKVzuGVh7e4
{ "alg": "HS256", "typ": "JWT" }2. >Stipule officiellement 7 champs, expliqués comme suit
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9iss : 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
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" ] }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 :
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19Utilisation du jeton JWTLe 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)Génération et vérification simples de JWT en Pythonbibliothèque jwt
Authorization: Bearer <token>
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}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_modelTutoriel 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!