@sumor/token-middleware

token-middleware

Un Sumor Cloud outil.
Plus de documentation

Un middleware de jeton pour ExpressJS.

CI Test Couverture Audit

Installation

npm i @sumor/token-middleware --save

Prérequis

Version de Node.JS

Nécessite la version Node.JS 18.x ou supérieure

Nécessite un module ES de Node.JS

Comme ce package est écrit en module ES, veuillez modifier le code suivant dans votre fichier package.json :

{
  "type": "module"
}

Utilisation

Ajouter le middleware de jeton à une application ExpressJS

import express from 'express'
import tokenMiddleware from '@sumor/token-middleware'

const app = express()
app.use(tokenMiddleware)

// charger le jeton
app.use(async (req, res, next) => {
  const tokenId = req.token.id
  const tokenInfo = await fetchToken(tokenId)
  req.token.user = tokenInfo.user
  req.token.data = tokenInfo.data
  req.token.permission = tokenInfo.permission
  next()
})

// définir le jeton
app.get('/login', async (req, res) => {
  const username = req.query.username
  const password = req.query.password
  req.token.id = await createToken(username, password)
  // il ajoutera automatiquement le jeton à l'en-tête de réponse du cookie 't'
  res.send('Connexion réussie')
})

// utiliser le jeton
app.get('/api', (req, res) => {
  // vérifier les permissions
  req.token.check('AUTH1')

  res.send('Bonjour le monde')
})

Vérification des permissions

// obtenir les permissions
req.token.permission = {
  AUTH1: ['LECTURE', 'ÉCRITURE'],
  AUTH2: ['LECTURE']
}
const hasAuth1 = req.token.has('AUTH1') // vrai
const hasAuth2 = req.token.has('AUTH2') // vrai
const hasAuth3 = req.token.has('AUTH3') // faux

const hasAuth1Lecture = req.token.has('AUTH1', 'LECTURE') // vrai
const hasAuth1Ecriture = req.token.has('AUTH1', 'ÉCRITURE') // vrai
const hasAuth2Lecture = req.token.has('AUTH2', 'LECTURE') // vrai
const hasAuth2Ecriture = req.token.has('AUTH2', 'ÉCRITURE') // faux

// vérifier les permissions
req.token.check('AUTH1') // réussi
req.token.check('AUTH2') // réussi
req.token.check('AUTH3') // lance une erreur PERMISSION_DENIED Permission denied: AUTH3
req.token.check('AUTH1', 'LECTURE') // réussi
req.token.check('AUTH1', 'ÉCRITURE') // réussi
req.token.check('AUTH2', 'LECTURE') // réussi
req.token.check('AUTH2', 'ÉCRITURE') // lance une erreur PERMISSION_DENIED Permission denied: AUTH2=ÉCRITURE