Angularjs 如何在Angular应用程序中存储身份验证令牌

Angularjs 如何在Angular应用程序中存储身份验证令牌,angularjs,cookies,local-storage,access-token,session-storage,Angularjs,Cookies,Local Storage,Access Token,Session Storage,我有一个Angular应用程序(SPA),它与REST API服务器通信,我感兴趣的是找到存储API服务器返回的访问令牌的最佳方法,以便Angular客户端可以使用它来验证将来对API的请求。出于安全原因,我希望将其存储为浏览器会话变量,以便在浏览器关闭后不会保留令牌 我正在使用资源所有者密码授权实现一个稍微定制的OAuth 2.0版本。Angular应用程序提供一个表单,供用户输入用户名和密码。然后,这些凭证被发送到API以交换访问令牌,该令牌随后必须作为所有到API的出站请求的头(授权:承载

我有一个Angular应用程序(SPA),它与REST API服务器通信,我感兴趣的是找到存储API服务器返回的访问令牌的最佳方法,以便Angular客户端可以使用它来验证将来对API的请求。出于安全原因,我希望将其存储为浏览器会话变量,以便在浏览器关闭后不会保留令牌

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

我对Angular领域相当陌生,但是我想实现的关于处理这些令牌的工作流总结如下

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

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

3)拦截HTTP请求。若设置了令牌,则将其作为头传递给API

4)当浏览器/选项卡关闭时,令牌被销毁

我知道Angular提供了$window.sessionStorage,这似乎是我正在寻找的,但根据我阅读的各种资源,我担心它可能无法在所有浏览器上工作。这是一个企业级应用程序,必须兼容多种浏览器(如Chrome、Firefox)。我可以放心地使用它,并确信它会稳定吗

据我所知,替代方案是$window.localStorage或cookies($cookies,$cookieStore)。这对我来说不是一个理想的解决方案,因为我不想让这些数据持久存在,但如果这更可靠,我将不得不牺牲效率来实现兼容性。我还认为可以简单地将它设置为$rootScope上的一个值,并以这种方式引用它,但我不确定这是否可行

我希望这一切都有意义。如有任何帮助/建议,将不胜感激。
谢谢

如果您正在寻找肯定不会持久的东西,那么我只需将令牌保存在内存中,而不依赖浏览器进行存储。但是,存储在rootScope中并不是最佳实践

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


是单例的,因此您的“服务器服务”将是一个全局实例,可以使用普通的依赖项注入进行访问。

$window。除非您针对的是非常旧的浏览器,否则会话存储是一种方法


据介绍,IE 8.0、Chrome 4.0、Firefox 3.5和Safari 4.0支持会话存储。

这不起作用。。。或一直工作到用户刷新页面。。。然后,auth…@AliBriceño消失了。如果用户刷新页面,您可能需要检查超时或重新验证@Exzile谢谢您的回答。你能给我举个例子吗?@AliBriceño我最后用了$Cookies和$Cookies。登录时,我只是设置了一个cookie值,并在加载时检查它。你找到了一个好方法吗?我在这里也有类似的情况。