我有一个非常简单的node.js应用程序构建在express上,它使用会话内存存储处理身份验证。基本上用户登录:
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)将返回与用户帐户关联的临时随机令牌,然后可以使用该临时随机令牌访问服务一段时间。然后,使用该服务将需要在每次调用中包括有效令牌。 (我认为这比每次传递用户名/密码更好,以便在调用get令牌后,密码不必存储在客户端计算机的内存中?)
这样的系统基本上和上面的系统一样安全吗?还是有更多的标准/安全方法来处理这个问题?处理这样的事情的标准方法是什么?
先谢谢你的帮助!
答案 0 :(得分:6)
您正在寻找的是HMAC,有一篇很棒的文章here可以了解如何实施您的服务。
关于基于会话的安全性是否比公共/私人密钥对更安全,受到广泛争论,并且实际上取决于实现/应用。在您的情况下,由于您希望在面向公众的API上进行每次请求身份验证,因此可以使用HMAC。