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 :
curl -H 'Authorization: Bearer honoiscool' http://localhost:8787/auth/pageImportation
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.
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 :
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é :
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é.
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.