我花了很多时间研究构建一个需要由单页 JavaScript 应用程序访问的 API,以及如何使其尽可能安全。
我读到的很多关于 OAuth 等标准的内容都表明,您永远不希望您发布的访问令牌直接提供给客户端,这就是为什么像隐式授权这样的事情经常受到批评的原因。
我最近读了这篇文章:http ://alexbilbie.com/2014/11/oauth-and-javascript/
...它提供了一个有趣的建议,即通过瘦服务器端组件代理对 API 的请求,以便单页应用程序可以通过代理进行身份验证,取回加密的会话 cookie,然后向代理服务器发出请求,这将在将请求转发到实际 API 之前,将用户的访问令牌附加到请求。
我想知道的是,这比只给客户一个访问令牌更安全吗?如果攻击者能够获得访问令牌,他们肯定可以获得存储会话信息的 cookie,这与向 API 发出请求的访问令牌一样好?
为什么我们认为带有会话详细信息的加密 cookie 是安全的,但使用实际访问令牌信任客户端被认为是不安全的?
真正的区别仅仅是没有直接客户端访问的 API 被认为是安全的私有 API,而任何需要客户端以任何方式(甚至通过代理)访问的 API 都需要被视为公开或开放的 API,而您只需要权衡某人可能能够伪造请求的风险,如果他们能够获得会话 cookie 或访问令牌?
单页应用程序向 API 证明其身份的最安全方式实际上是什么?