繁体   English   中英

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

[英]How to securely set authorization header using angularJs?

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

网络上有无数的教程,它们解释了如何使用角度来设置这样的授权标头,至少我实际使用的是使用$ http拦截器来设置的,现在讨论的是令牌不泄漏。

感谢CORS,有一些公共和私有API可以跨域使用。 很显然,我不想在任何这些请求上发送我的内部授权令牌。

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

有更好的解决方案吗?

更新

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

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

但是,有一个伟大而又免费的天气小部件。 我可以从https://myWhateverWeatherService.tld/weather.json检索JSON格式的当前天气信息。 登录到我的私有Web服务后,我还检索了天气信息(CORS允许我执行此操作)。

问题是,即使myWhateverWeatherService.tld根本不需要任何身份验证,Angular的$ http服务仍将附加Authorization标头。 我不信任myWhateverWeatherService.tld上的人。 也许他们只是设置服务,以便他们可以窃取Authorization令牌并与他们一起做很多令人讨厌的事情。

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

令牌始终通过电线发送,我想这是它中最容易受到攻击的部分。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM