Aller au contenu

Middleware JWT Auth ​

Le middleware JWT Auth assure l’authentification en vérifiant un jeton JWT. Le middleware recherche un en-tête Authorization si l’option cookie n’est pas définie. Vous pouvez personnaliser le nom de cet en-tête avec l’option headerName.

Information

L’en-tête Authorization envoyé par le client doit contenir un schéma spécifié.

Exemple : Bearer my.token.value ou Basic my.token.value

Importation ​

ts
import { Hono } from 'hono'
import { jwt } from 'hono/jwt'
import type { JwtVariables } from 'hono/jwt'

Utilisation ​

ts
// Specify the variable types to infer the `c.get('jwtPayload')`:
type Variables = JwtVariables

const app = new Hono<{ Variables: Variables }>()

app.use(
  '/auth/*',
  jwt({
    secret: 'it-is-very-secret',
    alg: 'HS256',
  })
)

app.get('/auth/page', (c) => {
  return c.text('You are authorized')
})

Récupérer la charge utile :

ts
const app = new Hono()

app.use(
  '/auth/*',
  jwt({
    secret: 'it-is-very-secret',
    alg: 'HS256',
    verification: {
      iss: 'my-trusted-issuer',
      aud: 'my-api',
    },
  })
)

app.get('/auth/page', (c) => {
  const payload = c.get('jwtPayload')
  return c.json(payload) // eg: { "sub": "1234567890", "name": "John Doe", "iat": 1516239022, "iss": "my-trusted-issuer" }
})

Conseil

jwt() est simplement une fonction middleware. Pour utiliser une variable d’environnement, par exemple c.env.JWT_SECRET, procédez comme suit :

js
app.use('/auth/*', (c, next) => {
  const jwtMiddleware = jwt({
    secret: c.env.JWT_SECRET,
    alg: 'HS256',
  })
  return jwtMiddleware(c, next)
})

Options ​

obligatoire secret: string ​

La valeur de votre clé secrète.

obligatoire alg: string ​

Le type d’algorithme utilisé pour la vérification.

Les types disponibles sont HS256 | HS384 | HS512 | RS256 | RS384 | RS512 | PS256 | PS384 | PS512 | ES256 | ES384 | ES512 | EdDSA.

Si cette option est définie, sa valeur sert de clé pour récupérer une valeur dans l’en-tête cookie, puis cette valeur est validée comme jeton.

facultatif headerName: string ​

Le nom de l’en-tête dans lequel rechercher le jeton JWT. La valeur par défaut est Authorization.

ts
app.use(
  '/auth/*',
  jwt({
    secret: 'it-is-very-secret',
    alg: 'HS256',
    headerName: 'x-custom-auth-header',
  })
)

facultatif realm: string ​

L’espace de protection décrit par le paramètre realm de l’en-tête de défi WWW-Authenticate renvoyé dans les réponses 401. La valeur par défaut est l’URL de la requête.

ts
app.use(
  '/auth/*',
  jwt({
    secret: 'it-is-very-secret',
    realm: 'my-protected-api',
  })
)

facultatif verification: VerifyOptions ​

Les options contrôlant la vérification du jeton.

facultatif VerifyOptions.iss: string | RegExp ​

L’émetteur attendu pour la vérification du jeton. Le claim iss n’est pas vérifié si cette option n’est pas définie.

facultatif VerifyOptions.aud: string | string[] | RegExp ​

L’audience attendue pour la vérification du jeton. Si cette option est définie, le jeton doit inclure un claim aud et au moins une valeur d’audience doit correspondre.

facultatif VerifyOptions.nbf: boolean ​

Le claim nbf (not before) est vérifié s’il est présent et que cette option vaut true. La valeur par défaut est true.

facultatif VerifyOptions.iat: boolean ​

Le claim iat (issued at) est vérifié s’il est présent et que cette option vaut true. La valeur par défaut est true.

facultatif VerifyOptions.exp: boolean ​

Le claim exp (expiration time) est vérifié s’il est présent et que cette option vaut true. La valeur par défaut est true.

Publié sous licence MIT.