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
トークンが無効な場合のカスタムメッセージ。