4

我有一个基于 express 构建的非常简单的 node.js 应用程序,它一直在使用会话内存存储处理身份验证。基本上,用户通过以下方式登录:

app.post('/sessions', function(req, res) {
            // check username/password and if valid set authenticated to true
        if (authenticated){
            req.session.user = req.body.username;
                } ...
});

然后在来自浏览器的每次调用中,调用一个 requiresLogin 中间件函数,该函数检查会话上的用户属性是否已设置。

我现在正在将应用程序转换为基本上只提供可能会或可能不会在浏览器中使用的服务,因此我正在考虑更改系统,以便将发布到 /getToken(而不是/sessions) 将返回与用户帐户关联的临时随机令牌,然后可以在一段时间内使用该令牌来访问服务。然后,使用该服务需要在每个调用中包含一个有效的令牌。(我认为这比每次都传递用户名/密码要好,这样密码就不必在调用获取令牌后存储在客户端计算机的内存中?)

这样的系统是否基本上与上述当前系统一样安全,或者是否有更标准/更安全的方法来处理这个问题?处理此类事情的标准方法是什么?

提前感谢您的帮助!

4

1 回答 1

6

您正在寻找的东西称为 HMAC,这里有一篇很棒的文章可以获取有关如何为您的服务实施的想法。

至于基于会话的安全性是否比公钥/私钥对更安全,这一点引起了广泛的争论,并且实际上取决于实现/应用程序。在您的情况下,由于您希望在面向公众的 API 上按请求进行身份验证,因此 HMAC 是要走的路。

于 2012-07-26T15:24:49.390 回答