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
import { Hono } from 'hono'
import { basicAuth } from 'hono/basic-auth'Utilisation
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 :
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é.
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.
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.
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 :
import { users } from '../config/users'
app.use(
'/auth/*',
basicAuth(
{
realm: 'www.example.com',
...users[0],
},
...users.slice(1)
)
)