跳到內容

Bearer 身份驗證中介軟體

Bearer 身份驗證中介軟體透過驗證請求標頭中的 API 令牌來提供身份驗證。存取端點的 HTTP 客戶端將會新增 Authorization 標頭,並將 Bearer {token} 作為標頭值。

從終端機使用 curl,它會看起來像這樣

sh
curl -H 'Authorization: Bearer honoiscool' https://127.0.0.1:8787/auth/page

匯入

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

用法

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

要限制為特定路由 + 方法

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

要實作多個令牌(例如,任何有效的令牌都可以讀取,但建立/更新/刪除則限制為具有權限的令牌)

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.

如果您想自行驗證令牌的值,請指定 verifyToken 選項;傳回 true 表示接受。

ts
const app = new Hono()

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

選項

必要 token: string | string[]

用來驗證傳入的 Bearer 令牌的字串。

選用 realm: string

領域的網域名稱,作為傳回的 WWW-Authenticate 質詢標頭的一部分。預設值為 ""。參閱更多:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#directives

選用 prefix: string

Authorization 標頭值的首碼(也稱為 schema)。預設值為 "Bearer"

選用 headerName: string

標頭名稱。預設值為 Authorization

選用 hashFunction: Function

用於處理雜湊以安全比較身份驗證令牌的函式。

選用 verifyToken: (token: string, c: Context) => boolean | Promise<boolean>

用於驗證令牌的函式。

選用 noAuthenticationHeaderMessage: string | object | MessageFunction

MessageFunction(c: Context) => string | object | Promise<string | object>。如果沒有身份驗證標頭,則為自訂訊息。

選用 invalidAuthenticationHeaderMessage: string | object | MessageFunction

如果身份驗證標頭無效,則為自訂訊息。

選用 invalidTokenMessage: string | object | MessageFunction

如果令牌無效,則為自訂訊息。

依 MIT 授權條款發布。