如何使用angularJs安全地设置授权标头?

时间:2014-09-03 19:19:42

标签: angularjs authorization angularjs-http

通常使用包含秘密令牌的授权标头对Web服务进行身份验证。并且由于此机制的安全性取决于令牌 secret ,因此应注意此令牌不会泄露。

网上有无数的教程解释了如何使用angular设置这样的授权标头,而且我实际读取的那些使用$ http拦截器,现在一个讨论令牌没有泄露。

有一些公共和一些私有API可以通过CORS与跨域交谈。显然,我不想在任何这些请求上发送我的内部授权令。

一些其他技术可以想到,例如仅在每个请求上手动设置令牌,但这意味着许多重复的代码。 $ http服务器可以包装在$ authenticatedHttp服务中,因此无论是经过身份验证的服务还是正常服务,它都始终显示在所使用的对象中。但是$ http服务有很多方法可以包装。

有更好的解决方案吗?

更新

从答案中我的印象是我的问题没有被理解。我用一个更具体的例子来尝试:

我有一个私人网页。人们必须使用用户名/密码登录,为简单起见,我们使用HTTP基本身份验证,因此用户名/密码是bas64编码的,并在HTTP标头“授权”中的每个请求上传输。到目前为止没有问题。

但是有一个伟大的,免费的天气小部件。我可以从https://myWhateverWeatherService.tld/weather.json以JSON格式检索当前天气信息。登录到我的私人网络服务后,我还检索了天气信息(CORS允许我这样做)。

问题在于,即使myWhateverWeatherService.tld根本不需要任何身份验证,angular的$ http服务仍将附加Authorization标头。我不相信myWhateverWeatherService.tld的那些人。也许他们只是设置服务,这样他们就可以窃取授权令牌并用它们做很多令人讨厌的事情。

我需要一些可靠的方法来解决这个问题。我已经考虑过在拦截器中使用一些正则表达式来检查url。这是可能的,但也不难忘记我的正则表达式会遗漏的特定情况。

1 个答案:

答案 0 :(得分:0)

令牌始终通过线路发送,我想这是最脆弱的部分。

由于令牌必须始终存在于http标头本身,因此使请求更安全的唯一方法是加密整个请求,为此您应该使用SSL。

如果您担心在客户端计算机上存储令牌的安全性,您可以将其保留在浏览器的内存中,而不必将其保留在本地存储或类似的东西上。因此,每次用户关闭浏览器并再次打开它时,他/她必须登录。