【发布时间】:2014-07-09 12:26:29
【问题描述】:
我有一个与 REST API 服务器通信的 Angular 应用程序 (SPA),我有兴趣找出存储从 API 服务器返回的访问令牌的最佳方法,以便 Angular 客户端可以使用它来验证对 API 的未来请求。出于安全原因,我想将其存储为浏览器会话变量,以便在关闭浏览器后不会保留令牌。
我正在使用资源所有者密码授权实现一个稍微定制的 OAuth 2.0 版本。 Angular 应用程序为用户提供了一个表单来输入他们的用户名和密码。然后将这些凭据发送到 API 以换取访问令牌,该令牌必须作为标头(授权:Bearer %Token%)发送到 API 的所有出站请求,以便它可以授权对其他路由的请求。
我对 Angular 领域还很陌生,但就处理这些令牌而言,我想实现的工作流程总结如下。
1) 客户端向 API 发出请求,向其提供用户凭据。
2)如果此请求成功,则令牌存储在某处(问题在哪里)
3) 拦截 HTTP 请求。如果设置了令牌,则将其作为标头传递给 API
4) 关闭浏览器/标签时,令牌被销毁。
我知道 Angular 提供 $window.sessionStorage,这似乎是我正在寻找的,但我担心它可能无法根据各种资源在所有浏览器上工作我'我读过。这是一个企业级应用程序,必须兼容各种浏览器(IE、Chrome、Firefox)。我可以放心使用它并确信它会稳定吗?
据我了解,替代方案是 $window.localStorage 或 cookie($cookies、$cookieStore)。这对我来说不是一个理想的解决方案,因为我不希望这些数据持续存在,但如果这更可靠,我将不得不牺牲效率来实现兼容性。我还认为可以简单地将其设置为 $rootScope 上的值并以这种方式引用它,但我不确定这是否可行。
我希望这一切都说得通。任何帮助/建议将不胜感激。 谢谢!
【问题讨论】:
-
你找到了一个好方法吗?我这里也有类似的情况。
标签: angularjs cookies local-storage access-token session-storage