JWT-Auth-Middleware
Die JWT-Auth-Middleware ermöglicht die Authentifizierung durch Überprüfung eines JWT-Tokens. Wenn die Option cookie nicht gesetzt ist, prüft die Middleware den Header Authorization. Mit der Option headerName kannst du den Header-Namen anpassen.
Info
Der vom Client gesendete Authorization-Header muss ein angegebenes Authentifizierungsschema enthalten.
Beispiel: Bearer my.token.value oder Basic my.token.value
Import
import { Hono } from 'hono'
import { jwt } from 'hono/jwt'
import type { JwtVariables } from 'hono/jwt'Verwendung
// 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')
})Nutzlast abrufen:
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" }
})Tipp
jwt() ist lediglich eine Middleware-Funktion. Wenn du eine Umgebungsvariable wie c.env.JWT_SECRET verwenden möchtest, kannst du so vorgehen:
app.use('/auth/*', (c, next) => {
const jwtMiddleware = jwt({
secret: c.env.JWT_SECRET,
alg: 'HS256',
})
return jwtMiddleware(c, next)
})Optionen
required secret: string
Der Wert deines geheimen Schlüssels.
required alg: string
Der zur Überprüfung verwendete Algorithmustyp.
Verfügbare Typen sind HS256 | HS384 | HS512 | RS256 | RS384 | RS512 | PS256 | PS384 | PS512 | ES256 | ES384 | ES512 | EdDSA.
optional cookie: string
Wenn gesetzt, wird mit diesem Wert als Schlüssel ein Wert aus dem Cookie-Header abgerufen und anschließend als Token überprüft.
optional headerName: string
Der Name des Headers, in dem nach dem JWT gesucht wird. Der Standardwert ist Authorization.
app.use(
'/auth/*',
jwt({
secret: 'it-is-very-secret',
alg: 'HS256',
headerName: 'x-custom-auth-header',
})
)optional realm: string
Der Schutzbereich, der durch den Parameter realm im Challenge-Header WWW-Authenticate beschrieben wird, der bei 401-Antworten zurückgegeben wird. Der Standardwert ist die Anfrage-URL.
app.use(
'/auth/*',
jwt({
secret: 'it-is-very-secret',
realm: 'my-protected-api',
})
)optional verification: VerifyOptions
Optionen zur Steuerung der Token-Prüfung.
optional VerifyOptions.iss: string | RegExp
Der erwartete Aussteller zur Token-Prüfung. Wenn nicht gesetzt, wird der Claim iss nicht geprüft.
optional VerifyOptions.aud: string | string[] | RegExp
Die erwartete Zielgruppe zur Token-Prüfung. Wenn gesetzt, muss das Token einen Claim aud enthalten und mindestens einer der Zielgruppenwerte muss übereinstimmen.
optional VerifyOptions.nbf: boolean
Der Claim nbf (frühester Gültigkeitszeitpunkt) wird geprüft, wenn er vorhanden und diese Option auf true gesetzt ist. Der Standardwert ist true.
optional VerifyOptions.iat: boolean
Der Claim iat (Ausstellungszeitpunkt) wird geprüft, wenn er vorhanden und diese Option auf true gesetzt ist. Der Standardwert ist true.
optional VerifyOptions.exp: boolean
Der Claim exp (Ablaufzeitpunkt) wird geprüft, wenn er vorhanden und diese Option auf true gesetzt ist. Der Standardwert ist true.