Zum Inhalt springen

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 ​

ts
import { Hono } from 'hono'
import { jwt } from 'hono/jwt'
import type { JwtVariables } from 'hono/jwt'

Verwendung ​

ts
// 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:

ts
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:

js
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.

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.

ts
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.

ts
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.

Veröffentlicht unter der MIT-Lizenz.