gpt4 book ai didi

javascript - Nodejs授权方法

转载 作者:行者123 更新时间:2023-12-03 00:44:28 25 4
gpt4 key购买 nike

在我不得不说之前,我发现了一些与此问题相关的帖子,但没有完全回答。

所以我实现了一个nodejs REST API服务器,数据库与mongoDB,但是关于身份验证我理解这个想法,使用jwt token 它工作完美。

/api/login

您会收到带有 token 的响应。现在您可以使用此 token 请求资源例如。

api/posts/:user_id

获取您的所有帖子...没问题!使用 mongoose findBy 查询.. bla bla!

因此,在这种情况下进行授权很容易,检查查询参数 user_id 是否等于 token (使用 user_id 解析 token )。繁荣资源有保障。

但如果我有一些资源,它们没有被 user_id 引用,保护这些资源的最佳实践是什么?!

示例

api/settings/:settings_id/emails

假设我知道其他用户的setting_id,并且我使用 token 进行了身份验证。那么服务器如何知道我不允许使用该资源?

最佳答案

首先,您应该采取更多措施来保护 token 。当您在用户登录后颁发 token 时,如果强制执行 https,则应将其 token 存储在 sessionStrorage 等 Web 存储中,或者使用 httpOnly cookie(您还可以添加用户代理/geoip 指纹)签署此 token 时添加到 user_id 以添加额外的安全层)。然后,当用户发出对 protected 资源的请求时,您可以将您签署 token 的指纹和 user_id 与他们代表发出请求的用户进行匹配。

您可以使用类似 passport-jwt 的内容作为 Express 中的中间件,要求对路由进行身份验证。在 Passport 中,您定义一个提取器处理程序,它基本上告诉它在哪里查看用户是否有 token 以及是否有 token ,并且验证它会添加您可以在后续操作中使用的 req.user 属性请求确定 token 持有者的 user_id。因此基本上通过这种方法,您知道每个请求的 user_id,这可以让您将其与他们请求的用户信息进行比较。

app.post('/settings/:settings_id/emails', passport.authenticate('jwt', { session: false }),
function(req, res) {
res.send(req.user.id);
}
);

关于javascript - Nodejs授权方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53309030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com