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
import { Hono } from 'hono'
import { jwt } from 'hono/jwt'
import type { JwtVariables } from 'hono/jwt'Utilisation
// 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 :
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 :
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.
facultatif cookie: string
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.
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.
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.