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