Appearance
hono-basic-auth
简介
hono-basic-auth 是 Hono 框架的基本认证(Basic Authentication)中间件,它提供了一种简单的方式来保护 API 或网站,要求用户提供用户名和密码才能访问。这种认证方式适用于内部工具、开发环境或不需要高级安全性的场景。
安装
bash
npm install hono @hono/basic-auth基本使用
typescript
import { Hono } from 'hono'
import { basicAuth } from '@hono/basic-auth'
const app = new Hono()
// 应用基本认证中间件
app.use(
'*',
basicAuth({
username: 'admin',
password: 'password123',
}),
)
app.get('/', (c) => {
return c.text('受保护的内容')
})
app.listen(3000)高级配置
typescript
import { Hono } from 'hono'
import { basicAuth } from '@hono/basic-auth'
const app = new Hono()
// 多用户认证
const users = {
admin: 'admin123',
user1: 'password1',
user2: 'password2',
}
app.use(
'/admin/*',
basicAuth({
// 自定义验证函数
verifyUser: async (username, password, c) => {
// 检查用户是否存在且密码匹配
if (users[username] && users[username] === password) {
// 可以在上下文中存储用户信息,供后续中间件使用
c.set('user', { username })
return true
}
return false
},
// 自定义认证失败响应
unauthorized: (c) => {
return c.text('认证失败:请提供有效的用户名和密码', 401)
},
// 自定义认证领域(显示在浏览器认证对话框中)
realm: '管理员区域',
}),
)
// 不同路径使用不同认证配置
app.use(
'/api/*',
basicAuth({
username: 'apiuser',
password: 'apipassword',
realm: 'API 访问',
}),
)
// 条件认证(例如,只在生产环境启用)
const isProd = process.env.NODE_ENV === 'production'
if (isProd) {
app.use(
'/beta/*',
basicAuth({
username: process.env.BETA_USER || 'beta',
password: process.env.BETA_PASSWORD || 'betapass',
realm: 'Beta 测试',
}),
)
}
// 使用环境变量存储凭据
app.use(
'/secure/*',
basicAuth({
username: process.env.AUTH_USER || 'default',
password: process.env.AUTH_PASSWORD || 'default',
// 在没有设置环境变量时禁用认证
skip: !process.env.AUTH_USER || !process.env.AUTH_PASSWORD,
}),
)注意事项
- 基本认证以明文形式传输凭据(Base64 编码但未加密),应始终与 HTTPS 一起使用
- 不适合用作主要的用户认证系统,更适合内部工具或临时保护
- 在生产环境中,避免硬编码凭据,使用环境变量或安全的配置管理
- 基本认证会在每个请求中发送凭据,不需要管理会话或 Cookie
- 某些代理或 CDN 可能会移除或修改认证头,需要特别配置
- 用户体验不佳,因为浏览器显示的认证对话框不能自定义样式