le nœud implémente l'authentification basée sur un jeton
Cet article présente principalement le nœud pour implémenter l'authentification par jeton. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
J'ai récemment étudié l'authentification par jeton et introduit ce mécanisme intégré dans le personnel. projets. De nos jours, la méthode d'authentification de nombreux sites Web est passée du traditionnel seesion+cookie à la vérification par jeton. Par rapport aux méthodes de vérification traditionnelles, les jetons offrent une meilleure évolutivité et sécurité.
Session traditionnelle+authentification par cookie
Le HTTP étant sans état, il n'enregistre pas l'identité de l'utilisateur. Une fois que l'utilisateur a envoyé le compte et le mot de passe au serveur, l'arrière-plan réussit la vérification, mais le statut n'est pas enregistré, donc la demande de l'utilisateur suivant doit toujours vérifier l'identité. Afin de résoudre ce problème, il est nécessaire de générer un enregistrement contenant l'identité de l'utilisateur côté serveur, c'est-à-dire la session, puis d'envoyer cet enregistrement à l'utilisateur et de le stocker localement dans la zone locale de l'utilisateur, c'est-à-dire un cookie. . Ensuite, la demande de l'utilisateur apportera ce cookie. Si le cookie du client et la session du serveur peuvent correspondre, cela signifie que l'authentification de l'identité de l'utilisateur a réussi.
Vérification de l'identité du jeton
Le processus est à peu près le suivant :
Lors de la première demande, l'utilisateur envoie le numéro de compte et mot de passe
Si la vérification des antécédents réussit, un jeton sensible au temps sera généré et ce jeton sera envoyé à l'utilisateur
Une fois que l'utilisateur a obtenu le jeton, stockez ce jeton localement, généralement dans un stockage local ou un cookie
Chaque requête ultérieure ajoutera ce jeton à l'en-tête de la requête, ainsi qu'à toutes les interfaces qui en ont besoin. pour vérifier l'identité sera vérifiée. Vérifiez le jeton. Si les données analysées par le jeton contiennent des informations sur l'identité de l'utilisateur, la vérification de l'identité est réussie.
Par rapport aux méthodes de vérification traditionnelles, la vérification des jetons présente les avantages suivants :
Dans l'authentification basée sur les jetons, le jeton est transmis via la demande en-tête. Au lieu de stocker les informations d’authentification dans une session ou un cookie. Cela signifie apatride. Vous pouvez envoyer des requêtes au serveur à partir de n'importe quel terminal pouvant envoyer des requêtes HTTP.
Peut éviter les attaques CSRF
Lorsqu'une session est lue, écrite ou supprimée dans une application, une opération sur le fichier se produit dans le dossier temporaire de le système d’exploitation, au moins la première fois. Supposons qu'il existe plusieurs serveurs et que la session est créée sur le premier service. Lorsque vous renvoyez la demande et que celle-ci arrive sur un autre serveur, les informations de session n'existent pas et vous obtenez une réponse « non authentifiée ». Je sais, vous pouvez résoudre ce problème avec une session collante. Cependant, dans l’authentification basée sur les jetons, ce problème est naturellement résolu. Il n'y a pas de problème de session persistante car le jeton de requête est intercepté à chaque requête envoyée au serveur.
Ce qui suit est une introduction à l'utilisation de node+jwt (tutoriel jwt) pour créer une simple vérification d'identité de jeton
Exemple
Lorsque l'utilisateur se connecte pour la première fois, il soumet son compte et son mot de passe au serveur. Si le serveur réussit la vérification, le token correspondant est généré :
.const fs = require('fs'); const path = require('path'); const jwt = require('jsonwebtoken'); //生成token的方法 function generateToken(data){ let created = Math.floor(Date.now() / 1000); let cert = fs.readFileSync(path.join(__dirname, '../config/pri.pem'));//私钥 let token = jwt.sign({ data, exp: created + 3600 * 24 }, cert, {algorithm: 'RS256'}); return token; } //登录接口 router.post('/oa/login', async (ctx, next) => { let data = ctx.request.body; let {name, password} = data; let sql = 'SELECT uid FROM t_user WHERE name=? and password=? and is_delete=0', value = [name, md5(password)]; await db.query(sql, value).then(res => { if (res && res.length > 0) { let val = res[0]; let uid = val['uid']; let token = generateToken({uid}); ctx.body = { ...Tips[0], data: {token} } } else { ctx.body = Tips[1006]; } }).catch(e => { ctx.body = Tips[1002]; }); });
Utilisateur Stockez le jeton obtenu localement par vérification :
store.set('loginedtoken',token);//store为插件
Une fois que le client a demandé une interface qui nécessite vérification de l'identité, le token sera placé dans l'en-tête de la requête transmis au serveur :
service.interceptors.request.use(config => { let params = config.params || {}; let loginedtoken = store.get('loginedtoken'); let time = Date.now(); let {headers} = config; headers = {...headers,loginedtoken}; params = {...params,_:time}; config = {...config,params,headers}; return config; }, error => { Promise.reject(error); })
Le serveur intercepte le token et vérifie la légitimité de tous. interfaces qui nécessitent une connexion.
function verifyToken(token){ let cert = fs.readFileSync(path.join(__dirname, '../config/pub.pem'));//公钥 try{ let result = jwt.verify(token, cert, {algorithms: ['RS256']}) || {}; let {exp = 0} = result,current = Math.floor(Date.now()/1000); if(current <= exp){ res = result.data || {}; } }catch(e){ } return res; } app.use(async(ctx, next) => { let {url = ''} = ctx; if(url.indexOf('/user/') > -1){//需要校验登录态 let header = ctx.request.header; let {loginedtoken} = header; if (loginedtoken) { let result = verifyToken(loginedtoken); let {uid} = result; if(uid){ ctx.state = {uid}; await next(); }else{ return ctx.body = Tips[1005]; } } else { return ctx.body = Tips[1005]; } }else{ await next(); } });
Les clés publiques et privées utilisées dans cet exemple peuvent être générées par vous-même. Le fonctionnement est le suivant :
- Ouvrez l'outil de ligne de commande, entrez openssl, ouvrez openssl ;
- Générez la clé privée : genrsa -out rsa_private_key.pem 2048
- Générer une clé publique : rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
Cliquez ici pour afficher le code backend du nœud
Cliquez ici ici pour voir le code front-end
explication et exécution des nœuds d'analyse des processus js
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Comment supprimer un nœud avec nvm : 1. Téléchargez « nvm-setup.zip » et installez-le sur le lecteur C ; 2. Configurez les variables d'environnement et vérifiez le numéro de version via la commande « nvm -v » 3. Utilisez la commande « nvm » ; install" commande Installer le nœud ; 4. Supprimez le nœud installé via la commande "nvm uninstall".

Les solutions au jeton de connexion invalide incluent la vérification si le jeton a expiré, la vérification si le jeton est correct, la vérification si le jeton a été falsifié, la vérification si le jeton correspond à l'utilisateur, la suppression du cache ou des cookies, la vérification de la connexion réseau et l'état du serveur. , vous reconnecter ou demander un nouveau jeton. Contacter le support technique ou les développeurs, etc. Introduction détaillée : 1. Vérifiez si le jeton a expiré. Le jeton de connexion a généralement une période de validité définie. Une fois la période de validité dépassée, il sera considéré comme invalide, etc.

Le problème du jeton de connexion invalide peut être résolu en vérifiant la connexion réseau, en vérifiant la période de validité du jeton, en effaçant le cache et les cookies, en vérifiant l'état de connexion, en contactant le développeur de l'application et en renforçant la sécurité du compte. Introduction détaillée : 1. Vérifiez la connexion réseau, reconnectez-vous au réseau ou modifiez l'environnement réseau ; 2. Vérifiez la période de validité du jeton, obtenez un nouveau jeton ou contactez le développeur de l'application 3. Effacez le cache et les cookies, effacez le navigateur ; cache et Cookie, puis reconnectez-vous à l'application; 4. Vérifiez l'état de connexion.

Comment gérer le téléchargement de fichiers ? L'article suivant vous expliquera comment utiliser Express pour gérer les téléchargements de fichiers dans le projet de nœud. J'espère qu'il vous sera utile !

Redis stocke les jetons utilisateur Lors de la conception d'un système similaire au commerce électronique, une exigence courante est que chaque page doit contenir des informations sur l'utilisateur connecté. Il existe deux solutions courantes : utiliser des cookies pour enregistrer et utiliser JWT pour enregistrer. Mais si le cache Redis est utilisé dans le système, il existe également une troisième solution : mettre en cache le jeton utilisateur dans Redis. Générez un jeton lors de la connexion et stockez-le dans Redis // Générez un objet jeton et enregistrez-le dans Redis redisTemplate.opsForHash().put("token","user",user)

Cet article partagera avec vous l'outil de gestion de processus de Node "pm2" et expliquera pourquoi pm2 est nécessaire, comment installer et utiliser pm2, j'espère qu'il sera utile à tout le monde !

Explication détaillée et guide d'installation pour les nœuds de pignon Cet article introduira l'écosystème de pignon en détail - nœuds PI, un rôle clé dans l'écosystème de pignon et fournir des étapes complètes pour l'installation et la configuration. Après le lancement du réseau de test de la blockchain pèse, les nœuds PI sont devenus une partie importante de nombreux pionniers participant activement aux tests, se préparant à la prochaine version du réseau principal. Si vous ne connaissez pas encore Pinetwork, veuillez vous référer à ce qu'est Picoin? Quel est le prix de l'inscription? PI Utilisation, exploitation minière et sécurité. Qu'est-ce que Pinetwork? Le projet Pinetwork a commencé en 2019 et possède sa pièce exclusive de crypto-monnaie PI. Le projet vise à en créer un que tout le monde peut participer

1. Authentification de connexion par jeton jwt : JSONWebToken. Il s'agit d'un protocole d'authentification généralement utilisé pour vérifier les informations d'identité et les autorisations d'identité demandées. Composé de trois parties : Header, Hayload, Signatureheader : c'est-à-dire les informations d'en-tête, qui sont les informations de base décrivant ce jeton, au format json {"alg": "HS256", // indique l'algorithme de signature, la valeur par défaut est HMACSHA256 ( écrit comme HS256) "type": "JWT" // Indique le type de jeton. Les jetons JWT sont uniformément écrits comme JWT} pa.
