Zum Inhalt springen

Bearer-Auth-Middleware ​

Die Bearer-Auth-Middleware ermöglicht die Authentifizierung durch Überprüfung eines API-Tokens im Anfrage-Header. HTTP-Clients, die auf den Endpunkt zugreifen, fügen den Header Authorization mit dem Wert Bearer {token} hinzu.

Mit curl im Terminal sieht das wie folgt aus:

sh
curl -H 'Authorization: Bearer honoiscool' http://localhost:8787/auth/page

Import ​

ts
import { Hono } from 'hono'
import { bearerAuth } from 'hono/bearer-auth'

Verwendung ​

NOTE

Dein token muss dem regulären Ausdruck /[A-Za-z0-9._~+/-]+=*/ entsprechen, andernfalls wird ein Fehler 400 zurückgegeben. Dieser Ausdruck unterstützt sowohl URL-sichere als auch standardmäßig Base64-kodierte JWTs. Die Middleware verlangt nicht, dass das Bearer-Token ein JWT ist, sondern nur, dass es dem genannten regulären Ausdruck entspricht.

ts
const app = new Hono()

const token = 'honoiscool'

app.use('/api/*', bearerAuth({ token }))

app.get('/api/page', (c) => {
  return c.json({ message: 'You are authorized' })
})

Auf eine bestimmte Route und Methode beschränken:

ts
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)
})

Mehrere Tokens implementieren, zum Beispiel wenn jedes gültige Token lesen darf, Erstellen, Aktualisieren und Löschen aber einem privilegierten Token vorbehalten bleiben:

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

Wenn du den Token-Wert selbst überprüfen möchtest, gib die Option verifyToken an. Der Rückgabewert true bedeutet, dass das Token akzeptiert wird.

ts
const app = new Hono()

app.use(
  '/auth-verify-token/*',
  bearerAuth({
    verifyToken: async (token, c) => {
      return token === 'dynamic-token'
    },
  })
)

Optionen ​

required token: string | string[] ​

Die Zeichenfolge, mit der das eingehende Bearer-Token verglichen wird.

optional realm: string ​

Der Name des Authentifizierungsbereichs als Bestandteil des zurückgegebenen WWW-Authenticate-Challenge-Headers. Der Standardwert ist "". Weitere Informationen: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#directives

optional prefix: string ​

Das Präfix, auch schema genannt, für den Wert des Authorization-Headers. Der Standardwert ist "Bearer".

optional headerName: string ​

Der Header-Name. Der Standardwert ist Authorization.

optional hashFunction: Function ​

Eine Funktion zur Hash-Berechnung für den sicheren Vergleich von Authentifizierungstokens.

optional verifyToken: (token: string, c: Context) => boolean | Promise<boolean> ​

Die Funktion zur Überprüfung des Tokens.

optional noAuthenticationHeader: object ​

Passt die Fehlerantwort an, wenn die Anfrage keinen Authentifizierungsheader enthält.

  • wwwAuthenticateHeader: string | object | MessageFunction - Passt den Wert des WWW-Authenticate-Headers an.
  • message: string | object | MessageFunction - Die benutzerdefinierte Nachricht für den Antwort-Body.

MessageFunction ist (c: Context) => string | object | Promise<string | object>.

optional invalidAuthenticationHeader: object ​

Passt die Fehlerantwort bei ungültigem Format des Authentifizierungsheaders an.

  • wwwAuthenticateHeader: string | object | MessageFunction - Passt den Wert des WWW-Authenticate-Headers an.
  • message: string | object | MessageFunction - Die benutzerdefinierte Nachricht für den Antwort-Body.

optional invalidToken: object ​

Passt die Fehlerantwort bei einem ungültigen Token an.

  • wwwAuthenticateHeader: string | object | MessageFunction - Passt den Wert des WWW-Authenticate-Headers an.
  • message: string | object | MessageFunction - Die benutzerdefinierte Nachricht für den Antwort-Body.

Veröffentlicht unter der MIT-Lizenz.