【发布时间】:2016-03-09 22:59:26
【问题描述】:
我有一个客户端 angular-js 应用程序。我有一个服务器端 nodejs API。客户端和服务器端应用程序位于不同的域中。客户端使用 API 获取或发布一些数据。客户端也需要从服务器端获取图像并在浏览器中显示。
我使用护照 nodejs 模块进行身份验证。我不知道哪种身份验证策略更适合我。我认为有两种类型的身份验证策略:基于令牌和基于cookie。而且我认为这两种类型在我的情况下都没用:
如果我使用基于令牌的策略,那么我应该在每个请求中向 API 发送带有令牌的 Authentication 标头。我可以在 AJAX 请求中发送标头,但是如果我想显示位于服务器端的图像,我会遇到问题。因为浏览器不会在
<img>标记中发送标头。如果我使用 cookie,那么我不会遇到图像问题。但我对 AJAX 请求有疑问。因为会话 cookie 存储在服务器端应用程序的域中。如果我从客户端域发送 AJAX 请求,那么我应该在每个请求中发送 cookie。我将 XmlHttpRequest 用于 AJAX,我应该使用 withCredentials 选项来发送 cookie。但是在跨域请求中,浏览器会在每个 AJAX 请求之前发送一个预检(OPTION)请求。并且浏览器不会发送带有 OPTION 请求的 cookie。这对我来说是个问题,因为如果未经授权,服务器端 API 无法对 OPTION 请求做出正确响应。
采用的解决方案是什么?
【问题讨论】:
标签: api authentication authorization passport.js