angularjs – 如何在Angular应用程序中存储验证令牌

前端之家收集整理的这篇文章主要介绍了angularjs – 如何在Angular应用程序中存储验证令牌前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Angular应用程序(SPA)与REST API服务器进行通信,我有兴趣找出存储从API服务器返回的访问令牌的最佳方法,以便Angular客户端可以使用它来验证未来的请求到API.出于安全考虑,我想将其存储为浏览器会话变量,以便在浏览器关闭后令牌不会被保留.

我正在使用资源所有者密码授权实施一个稍微定制的OAuth 2.0版本. Angular应用程序提供一个表单供用户输入用户名和密码.然后将这些凭证交给API,以交换访问令牌,然后必须将其作为标头(授权:承载%令牌%)发送给API的所有出站请求,以便可以向其他路由授权请求.

我对于Angular的领域来说是相当新鲜的,但是我想要处理这些令牌的工作流程总结如下.

1)客户端向API提出请求,提供用户凭据.

2)如果此请求成功,令牌存储在某处(问题在哪里)

3)拦截HTTP请求.如果设置了令牌,则将其作为标头传递给API

4)当浏览器/选项卡关闭时,令牌被破坏.

我知道Angular提供了$window.sessionStorage,这似乎是我正在寻找的,但我关心的是,它不可能在所有浏览器上工作,根据我读过的各种资源.这是一个企业级应用程序,必须兼容各种浏览器(IE,Chrome,Firefox).我可以安心地使用这个信心,它会是稳定的吗?

从我理解的替代方案是$window.localStorage或cookies($cookies,$cookieStore).这对我来说不是一个理想的解决方案,因为我不希望这些数据持续存在,但是如果这个数据更可靠,我必须牺牲兼容性的效率.我也认为可以简单地将它设置为$rootScope上的一个值,并以这种方式引用它,但是我不知道这是否可行.

我希望这一切都有道理.任何帮助/建议将不胜感激.
谢谢!

如果您正在寻找绝对不会持续的东西,那么我只会将令牌保留在内存中,而不是依赖浏览器进行存储.但是,存储在rootScope中不是最佳实践.

如果您还没有这样做,我建议您将服务器访问代码包装在角色服务中.然后,您可以在运行时(例如作为属性)将该令牌封装在该服务中,而无需担心在从应用程序的其他部分进行调用时必须访问该令牌.

Angular Services是单例,因此您的“服务器服务”将是可以使用正常依赖注入访问的全局实例.

猜你在找的Angularjs相关文章