コンテンツにスキップ

Bearer認証ミドルウェア

Bearer認証ミドルウェアは、リクエストヘッダー内の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'

使い方

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ライセンスの下でリリースされています。