Maison interface Web js tutoriel le nœud implémente l'authentification basée sur un jeton

le nœud implémente l'authentification basée sur un jeton

Apr 10, 2018 pm 03:05 PM
node token identité

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 :

  1. Lors de la première demande, l'utilisateur envoie le numéro de compte et mot de passe

  2. 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

  3. Une fois que l'utilisateur a obtenu le jeton, stockez ce jeton localement, généralement dans un stockage local ou un cookie

  4. 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 :

  1. 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.

  2. Peut éviter les attaques CSRF

  3. 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];
  });

});
Copier après la connexion

Utilisateur Stockez le jeton obtenu localement par vérification :

store.set('loginedtoken',token);//store为插件
Copier après la connexion

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);
})
Copier après la connexion

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 = &#39;&#39;} = ctx;
  if(url.indexOf(&#39;/user/&#39;) > -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();
  }
});
Copier après la connexion

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 :

  1. Ouvrez l'outil de ligne de commande, entrez openssl, ouvrez openssl ;

  2. Générez la clé privée : genrsa -out rsa_private_key.pem 2048

  3. 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

Recommandations associées :

Système de modules Node.js

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

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)

Comment supprimer un nœud dans NVM Comment supprimer un nœud dans NVM Dec 29, 2022 am 10:07 AM

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".

Que faire si le jeton de connexion n'est pas valide Que faire si le jeton de connexion n'est pas valide Sep 14, 2023 am 11:33 AM

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.

Comment résoudre le problème du jeton de connexion invalide Comment résoudre le problème du jeton de connexion invalide Sep 14, 2023 am 10:57 AM

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 utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Comment utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Mar 28, 2023 pm 07:28 PM

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 !

Comment résoudre le problème du stockage des jetons utilisateur dans Redis Comment résoudre le problème du stockage des jetons utilisateur dans Redis May 31, 2023 am 08:06 AM

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)

Une analyse approfondie de l'outil de gestion de processus de Node « pm2 » Une analyse approfondie de l'outil de gestion de processus de Node « pm2 » Apr 03, 2023 pm 06:02 PM

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 !

Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Mar 05, 2025 pm 05:57 PM

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

Comment Vue3+Vite utilise deux jetons pour obtenir une actualisation insensée Comment Vue3+Vite utilise deux jetons pour obtenir une actualisation insensée May 10, 2023 pm 01:10 PM

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.

See all articles