Aller au contenu

Middleware Basic Auth ​

Ce middleware permet d’appliquer une authentification HTTP Basic à un chemin donné. Mettre en place l’authentification Basic sur Cloudflare Workers ou d’autres plateformes est plus compliqué qu’il n’y paraît, mais ce middleware simplifie la tâche.

Pour en savoir plus sur le fonctionnement du schéma d’authentification Basic, consultez la documentation MDN.

Importation ​

ts
import { Hono } from 'hono'
import { basicAuth } from 'hono/basic-auth'

Utilisation ​

ts
const app = new Hono()

app.use(
  '/auth/*',
  basicAuth({
    username: 'hono',
    password: 'acoolproject',
  })
)

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

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

ts
const app = new Hono()

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

app.delete(
  '/auth/page',
  basicAuth({ username: 'hono', password: 'acoolproject' }),
  (c) => {
    return c.text('Page deleted')
  }
)

Pour vérifier vous-même l’utilisateur, spécifiez l’option verifyUser ; renvoyer true signifie que l’utilisateur est accepté.

ts
const app = new Hono()

app.use(
  basicAuth({
    verifyUser: (username, password, c) => {
      return (
        username === 'dynamic-user' && password === 'hono-password'
      )
    },
  })
)

Options ​

obligatoire username: string ​

Le nom d’utilisateur de la personne qui s’authentifie.

obligatoire password: string ​

Le mot de passe attendu pour le nom d’utilisateur fourni.

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 "Secure Area".
Pour en savoir plus : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#directives

facultatif hashFunction: Function ​

Une fonction de hachage pour comparer les mots de passe de façon sûre.

facultatif verifyUser: (username: string, password: string, c: Context) => boolean | Promise<boolean> ​

La fonction de vérification de l’utilisateur.

facultatif invalidUserMessage: string | object | MessageFunction ​

MessageFunction correspond à (c: Context) => string | object | Promise<string | object>. Le message personnalisé renvoyé si l’utilisateur est invalide.

facultatif onAuthSuccess: (c: Context, username: string) => void | Promise<void> ​

Une fonction de rappel appelée après une authentification réussie. Elle permet de définir des variables de contexte ou d’effectuer des effets de bord sans analyser à nouveau l’en-tête Authorization.

ts
app.use(
  '/auth/*',
  basicAuth({
    username: 'hono',
    password: 'acoolproject',
    onAuthSuccess: (c, username) => {
      c.set('username', username)
    },
  })
)

app.get('/auth/page', (c) => {
  const username = c.get('username')
  return c.text(`Hello, ${username}!`)
})

Options supplémentaires ​

facultatif ...users: { username: string, password: string }[] ​

Recettes ​

Définir plusieurs utilisateurs ​

Ce middleware permet aussi de passer des paramètres supplémentaires contenant des objets qui définissent d’autres paires username et password.

ts
app.use(
  '/auth/*',
  basicAuth(
    {
      username: 'hono',
      password: 'acoolproject',
      // Define other params in the first object
      realm: 'www.example.com',
    },
    {
      username: 'hono-admin',
      password: 'super-secure',
      // Cannot redefine other params here
    },
    {
      username: 'hono-user-1',
      password: 'a-secret',
      // Or here
    }
  )
)

Ou avec moins de valeurs codées en dur :

ts
import { users } from '../config/users'

app.use(
  '/auth/*',
  basicAuth(
    {
      realm: 'www.example.com',
      ...users[0],
    },
    ...users.slice(1)
  )
)

Publié sous licence MIT.