通常使用包含秘密令牌的授权标头对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。这是可能的,但也不难忘记我的正则表达式会遗漏的特定情况。
答案 0 :(得分:0)
令牌始终通过线路发送,我想这是最脆弱的部分。
由于令牌必须始终存在于http标头本身,因此使请求更安全的唯一方法是加密整个请求,为此您应该使用SSL。
如果您担心在客户端计算机上存储令牌的安全性,您可以将其保留在浏览器的内存中,而不必将其保留在本地存储或类似的东西上。因此,每次用户关闭浏览器并再次打开它时,他/她必须登录。