7

我有几个问题:

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

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

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

4

1 回答 1

11

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

1)对于第一个问题,我的答案是肯定!您不想编写 2 倍的 API 逻辑。

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

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

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

分离的好处是:

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

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

您可以参考这个问题以在 express 中实现 CSRF 安全性:如何使用 express.js 在 Ajax 调用中实现 CSRF 保护(寻找完整的示例)?

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

希望能帮助到你。

于 2013-03-29T08:49:08.403 回答