Aller au contenu

Middleware Bearer Auth ​

Le middleware Bearer Auth assure l’authentification en vérifiant un jeton d’API dans l’en-tête de la requête. Les clients HTTP qui accèdent au point d’accès ajoutent l’en-tête Authorization avec la valeur Bearer {token}.

Avec curl dans un terminal, cela ressemble à ceci :

sh
curl -H 'Authorization: Bearer honoiscool' http://localhost:8787/auth/page

Importation ​

ts
import { Hono } from 'hono'
import { bearerAuth } from 'hono/bearer-auth'

Utilisation ​

NOTE

Votre token doit correspondre à l’expression régulière /[A-Za-z0-9._~+/-]+=*/, sinon une erreur 400 est renvoyée. Cette expression accepte notamment les JWT encodés en Base64 standard et en Base64 compatible avec les URL. Ce middleware n’exige pas que le jeton Bearer soit un JWT, seulement qu’il corresponde à cette expression régulière.

ts
const app = new Hono()

const token = 'honoiscool'

app.use('/api/*', bearerAuth({ token }))

app.get('/api/page', (c) => {
  return c.json({ message: 'You are authorized' })
})

Pour limiter l’authentification à une combinaison précise de route et de méthode :

ts
const app = new Hono()

const token = 'honoiscool'

app.get('/api/page', (c) => {
  return c.json({ message: 'Read posts' })
})

app.post('/api/page', bearerAuth({ token }), (c) => {
  return c.json({ message: 'Created post!' }, 201)
})

Pour utiliser plusieurs jetons, par exemple autoriser la lecture avec tout jeton valide mais réserver la création, la modification et la suppression à un jeton privilégié :

ts
const app = new Hono()

const readToken = 'read'
const privilegedToken = 'read+write'
const privilegedMethods = ['POST', 'PUT', 'PATCH', 'DELETE']

app.on('GET', '/api/page/*', async (c, next) => {
  // List of valid tokens
  const bearer = bearerAuth({ token: [readToken, privilegedToken] })
  return bearer(c, next)
})
app.on(privilegedMethods, '/api/page/*', async (c, next) => {
  // Single valid privileged token
  const bearer = bearerAuth({ token: privilegedToken })
  return bearer(c, next)
})

// Define handlers for GET, POST, etc.

Pour vérifier vous-même la valeur du jeton, spécifiez l’option verifyToken ; renvoyer true signifie que le jeton est accepté.

ts
const app = new Hono()

app.use(
  '/auth-verify-token/*',
  bearerAuth({
    verifyToken: async (token, c) => {
      return token === 'dynamic-token'
    },
  })
)

Options ​

obligatoire token: string | string[] ​

La chaîne à laquelle comparer le jeton Bearer reçu pour le valider.

facultatif realm: string ​

Le nom du domaine de protection (realm), inclus dans l’en-tête de défi WWW-Authenticate renvoyé. La valeur par défaut est "". Pour en savoir plus : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#directives

facultatif prefix: string ​

Le préfixe, également appelé schema, de la valeur de l’en-tête Authorization. La valeur par défaut est "Bearer".

facultatif headerName: string ​

Le nom de l’en-tête. La valeur par défaut est Authorization.

facultatif hashFunction: Function ​

Une fonction de hachage pour comparer les jetons d’authentification de façon sûre.

facultatif verifyToken: (token: string, c: Context) => boolean | Promise<boolean> ​

La fonction de vérification du jeton.

facultatif noAuthenticationHeader: object ​

Personnalise la réponse d’erreur lorsque la requête ne contient pas d’en-tête d’authentification.

  • wwwAuthenticateHeader: string | object | MessageFunction - Personnalise la valeur de l’en-tête WWW-Authenticate.
  • message: string | object | MessageFunction - Le message personnalisé pour le corps de la réponse.

MessageFunction correspond à (c: Context) => string | object | Promise<string | object>.

facultatif invalidAuthenticationHeader: object ​

Personnalise la réponse d’erreur lorsque le format de l’en-tête d’authentification est invalide.

  • wwwAuthenticateHeader: string | object | MessageFunction - Personnalise la valeur de l’en-tête WWW-Authenticate.
  • message: string | object | MessageFunction - Le message personnalisé pour le corps de la réponse.

facultatif invalidToken: object ​

Personnalise la réponse d’erreur lorsque le jeton est invalide.

  • wwwAuthenticateHeader: string | object | MessageFunction - Personnalise la valeur de l’en-tête WWW-Authenticate.
  • message: string | object | MessageFunction - Le message personnalisé pour le corps de la réponse.

Publié sous licence MIT.