2013-03-18 75 views
7

我有几个问题:node.js的REST API认证的oauth2

1)这是一个好的做法是使用REST API都为外部API的使用和服务器端的骨架(或纯JS)前端? 我认为编写一个REST API服务器并将其用作后端要容易得多。

2)如果我用oauth 2编写webapp认证标准是将我的秘密标记存储在cookie中的一种好方法?我认为这会导致CSRF漏洞。

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

回答

11

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

1)第一个问题,我的答案肯定是!你不想写2次API逻辑。

你可以做的是使用不同的URL。

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

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

好事关于分离是:

  • 你分开的安全问题
  • 您可以控制接入带宽,如果你的应用程序传输大量的数据(你想要的应用程序给予更高的优先级给你。 ..以及可能!)
  • 或者干脆就可以控制权限(如无通过公开API DELETE)

2)我不是一个安全专家,但我肯定会信任护照。 js认证系统,因为它在将节点用作后端时被广泛使用。

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

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

希望它有帮助。