我有几个问题:
1)使用REST API作为外部API使用和作为主干(或纯js)前端的服务器端是一个很好的做法吗?我认为编写一个REST API服务器并将其用作后端要容易得多。
2)如果我写我的webapp认证与oauth 2标准是一个好方法来存储我的秘密令牌在cookie?我认为这会导致CSRF漏洞。
正如我看到的passport.js使用cookie来存储秘密令牌,例如Facebook或twitter…在这种情况下CSRF是什么?
这是一个非常有趣的问题,我很惊讶没有人回答。
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作为后端时被广泛使用。
您可以参考这个问题实现CSRF安全在express:如何实现CSRF保护在Ajax调用使用express.js(寻找完整的例子)?
或者另一种策略是使用刷新令牌如果你使用FB或Twitter连接策略。
希望能有所帮助。