我正在为我的游戏构建一个REST api。由于我是新手,因此我很难弄清楚如何“锁定”端点。从某种意义上说,我不希望任何人向我的游戏分数端点发布帖子请求并更新它。什么是防止这种情况的最佳解决方案?
答案 0 :(得分:2)
您需要的是授权过程,常见的实施是ACL(访问控制列表),其中您所做的每个请求都必须包含一个令牌,该令牌与一组角色相关联,每个角色都有多个权限。在每个请求中,您检查该令牌对请求端点的权限,并查看是否允许请求者执行该操作。
有一些软件包很容易实现acl。
如果您不想花太多时间自己这样做,我建议您查看Loopback。
编辑:
在您的前端应用程序中,您可以使用以下内容:
app.all(['/api/*', '/fe/*'], function(req, res) {
req.pipe(request({
headers: { 'Authorization': process.env.AUTH_TOKEN },
url: process.env.PROXY + req.url,
method: req.method,
body: req.body,
rejectUnauthorized: false,
withCredentials: true
}))
.on('error', function(e) {
res.status(500).send(e);
})
.pipe(res);
});
该代码的作用是将任何以/ api /或/ fe /开头的请求传递给您的前端并将它们传送到后端服务器(process.env.PROXY
)。
关键部分是process.env.AUTH_TOKEN
,你可以在这里使用随机和大哈希。然后,在每个受保护的请求中,您的后端会检查标头是否与您选择的AUTH_TOKEN
匹配。
这样做的好处是最终用户似乎永远不会看到该令牌,因为最终用户只会看到发送到您的前端服务器的请求。