在RESTful应用程序中执行身份验证

时间:2014-08-12 13:17:37

标签: node.js angularjs

我正在寻找在应用程序中执行身份验证的方法,这些方法主要使用RESTFUL API。我特指的是MEAN堆栈应用程序。这里后端(Node + express)和前端(Angular)完全解耦,没有任何联系。

我执行身份验证的方式是 1.当用户首次登录时,服务器在HTTP消息的x-access-token标头中以加密形式包括userid。然后,在所有后续请求中,服务器将检查令牌的请求标头

 var token = (req.body && req.body.access_token) || parsed_url.access_token || req.headers['x-access-token'];

在客户端,我使用角度拦截器捕获此标头,解密它,然后在进行后续调用时重新发送它。

此过程中的任何地方都没有使用cookie或会话(我相信这是REST真正需要实现的方式)

这一切现在都有效。

但我的问题是,这是做事的正确方法。使用它比使用cookie有什么缺点?

1 个答案:

答案 0 :(得分:0)

如果用户ID易于猜测或枚举(并且您必须假设加密方法已知 - 我们不喜欢"默示安全"),那么客户端可以伪造加密的用户ID。更重要的是,如果有人获得了用户ID(您的流量是https?),他们也可以这样做。

你必须:

  1. 附加"有效期至"服务器返回的令牌的时间戳。
  2. 哈希得到的"有效性:userId"在服务器上使用密钥,并将生成的哈希附加到令牌,使令牌" validity:userId:hash(validity + user_id)"。
  3. 在服务器端,检查哈希是否匹配(rehash" validity:userId"并与令牌的第3部分进行比较)。
  4. 如果你这样做,你也可以发送" userId"简单来说,不需要加密。