node.js REST api身份验证和oauth2

时间:2013-03-18 08:54:54

标签: node.js rest csrf passport.js

我有几个问题:

1)对于外部API使用和作为主干(或普通js)前端的服务器端,使用REST API是一个好习惯吗? 我认为编写一个REST API服务器并将其用作后端要容易得多。

2)如果我使用oauth 2标准编写我的webapp身份验证,这是将我的秘密令牌存储在cookie中的好方法吗?我认为这会导致CSRF漏洞。

正如我所看到的,passport.js使用cookie存储秘密令牌,例如Facebook或Twitter ... 在这种情况下,CSRF是什么?

1 个答案:

答案 0 :(得分:11)

这是一个非常有趣的问题,我很惊讶没有人回答。

1)对于第一个问题,我的回答肯定是!您不希望编写2次API逻辑。

您可以做的是使用不同的网址。

EG。对于公共API,您使用http://api.domain.com/objects/而关于内部API,您可以使用http://domain.com/api/objects/或您喜欢的任何内容。

然后使用相同的逻辑,但使用不同的身份验证策略。公共的一个带有身份验证令牌,就像许多流行的API(Twitter,Facebook等)和私有的一个使用passport.js的日志。

分离的好处是:

  • 您将安全问题分开
  • 如果您的应用传输了大量数据,您可以控制访问带宽(并且您希望为您的应用提供更高的优先级......很可能!)
  • 或者只是您可以控制授权(例如,没有通过公共API删除)

2)我不是安全大师,但我肯定会信任passport.js身份验证系统,因为它在将节点用作后端时被广泛使用。

您可以参考此问题,以便在快递中实施CSRF安全性:How to implement CSRF protection in Ajax calls using express.js (looking for complete example)?

或者,如果您使用FB或Twitter连接策略,则另一种策略是使用刷新令牌。

希望它有所帮助。