托管在 Vercel 的 Nodejs 应用如何设计管理员认证呢?
想基于 Nuxtjs 做个工具类的应用,能够让人直接部署到 Vercel 上使用,这个工具需要一个管理系统,让用户修改配置。
- 初步想法是在部署的时候通过环境变量把管理员密码设置好,但是考虑到是公网部署,可能有被攻击的风险。
- 第三方的验证也考虑过,但是基本上都要申请一个 AppCode ,对于开箱即用的应用来说有点麻烦了。
有没有能够防止管理系统被暴力破解的方法呢?套个 CF 有用不?
托管在 Vercel 的 Nodejs 应用如何设计管理员认证呢?
vercel 有数据库服务啊,KV 和 Postgres ,可以做个引导安装,没设置账户密码的要先设置,然后存起来
嗯嗯,本来项目就用了 Prisma 结合 Vercel 的数据库的,因为只有一个管理员所以感觉存进数据库似乎不是很有必要(不太了解)?所以就不做用户系统,打算用环境变量配置一下密码就行了
可能我没表达清楚,我不懂把权限验证页面暴露在公网时要做什么防护。。需要做什么处理防止被暴力破解吗
只要是用密码的服务不都会被暴力破解吗?防止暴力破解就加个重试限制呗
我理解应该有一个部署脚本(安装程序)吧,用户运行这个脚本来安装到 vercel 上,那么密码必须不固定,要么由用户自己设置,要么生成一个随机密码,返回给用户即可。
同理,如果要进一步提升安全等级,可以考虑两步验证( 2FA / TOTP ),用户运行安装脚本安装成功后,返回一个二维码,用户可以用各类验证器扫码,登录时要求输入两步验证码。
要防止被人暴力穷举密码,可以在登录页面加入文字验证码,或添加一定时间内 ip 的尝试次数限制。
两个办法
1. Cloudflare Zerotrust ,虽然是第三方但是不需要 AppCode
2. 环境变量设置密码哈希,用 argon2
在设计托管在 Vercel 的 Node.js 应用的管理员认证时,可以遵循以下步骤:
-
定义角色和权限:
- 区分管理员和普通用户角色,并为管理员分配特定权限。
-
用户认证:
- 使用常见的身份验证机制,如用户名和密码。
- 在 Node.js 中,可以使用 Passport.js 或其他身份验证中间件来简化认证过程。
-
角色分配:
- 在用户成功认证后,根据用户角色分配权限。
- 角色信息可以存储在用户数据库记录中。
-
路由保护:
- 使用中间件来保护需要管理员权限的路由。
- 在 Express 框架中,可以使用
app.use()
函数和自定义中间件来检查用户角色。
以下是一个简单的示例代码,展示如何在 Express 中实现管理员认证中间件:
const express = require('express');
const app = express();
// 假设有一个函数 checkAdminRole,用于检查用户是否为管理员
function checkAdminRole(req, res, next) {
if (req.user && req.user.role === 'admin') {
next();
} else {
res.status(403).send('Forbidden: You do not have access to this resource.');
}
}
// 管理员路由示例
app.get('/admin', checkAdminRole, (req, res) => {
res.send('Welcome to the admin area!');
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过以上步骤和代码,你可以在 Vercel 托管的 Node.js 应用中实现管理员认证。