跳转到正文

Bearer Auth 中间件 ​

Bearer Auth 中间件通过验证请求头中的 API 令牌提供身份验证。 访问端点的 HTTP 客户端需要添加 Authorization 请求头,其值为 Bearer {token}。

在终端使用 curl 时,形式如下:

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

导入 ​

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

用法 ​

NOTE

token 必须匹配正则表达式 /[A-Za-z0-9._~+/-]+=*/,否则返回 400 错误。此表达式同时支持 URL 安全的 Base64 和标准 Base64 编码的 JWT。此中间件不要求 bearer 令牌是 JWT,只要求匹配上述正则表达式。

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

选项 ​

required token: string | string[] ​

用于比对传入 bearer 令牌的字符串。

optional realm: string ​

保护域的名称,作为返回的 WWW-Authenticate 质询响应头的一部分。默认值为 ""。 更多详情:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#directives

optional prefix: string ​

Authorization 请求头值的前缀(也称为 schema)。默认值为 "Bearer"。

optional headerName: string ​

请求头名称。默认值为 Authorization。

optional hashFunction: Function ​

执行哈希运算以安全比较身份验证令牌的函数。

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

验证令牌的函数。

optional noAuthenticationHeader: object ​

自定义请求缺少身份验证头时的错误响应。

  • wwwAuthenticateHeader:string | object | MessageFunction - 自定义 WWW-Authenticate 响应头值。
  • message:string | object | MessageFunction - 响应体的自定义消息。

MessageFunction 的类型为 (c: Context) => string | object | Promise<string | object>。

optional invalidAuthenticationHeader: object ​

自定义身份验证头格式无效时的错误响应。

  • wwwAuthenticateHeader:string | object | MessageFunction - 自定义 WWW-Authenticate 响应头值。
  • message:string | object | MessageFunction - 响应体的自定义消息。

optional invalidToken: object ​

自定义令牌无效时的错误响应。

  • wwwAuthenticateHeader:string | object | MessageFunction - 自定义 WWW-Authenticate 响应头值。
  • message:string | object | MessageFunction - 响应体的自定义消息。

基于 MIT 许可证发布。