通常使用包含秘密令牌的授权标头对 Web 服务进行身份验证。并且由于该机制的安全性取决于要保密的令牌,因此应注意该令牌不会泄露。
网上有无数教程解释了如何使用 angular 设置这样的授权标头,至少我实际阅读过的那些使用 $http 拦截器,现在有人讨论令牌没有泄露。
由于 CORS,有一些公共和一些私有 API 可以跨域通信。显然我不想在任何这些请求上发送我的内部授权令牌。
想到了一些其他技术,例如仅在每个请求上手动设置令牌,但这意味着大量重复代码。$http 服务器可以包装在 $authenticatedHttp 服务中,这样无论它是经过身份验证的服务还是普通服务,它总是从所使用的对象中显现出来。然而 $http 服务有很多方法需要包装。
有更好的解决方案吗?
更新
从答案中,我的印象是我的问题没有被理解。我用一个更具体的例子来试试:
我有一个私人网页。人们必须使用用户名/密码登录,为了简单起见,我们使用 HTTP 基本身份验证,因此用户名/密码是 bas64 编码的,并且在 HTTP 标头“授权”中的每个请求上传输。到目前为止没有问题。
但是有这个很棒的免费天气小部件。我可以从https://myWhateverWeatherService.tld/weather.json以 JSON 格式检索当前天气信息。登录到我的私人网络服务后,我还检索天气信息(CORS 允许我这样做)。
问题是即使 myWhateverWeatherService.tld 根本不需要任何身份验证,Angular 的 $http 服务仍然会附加 Authorization 标头。而且我不信任 myWhateverWeatherService.tld 的人。也许他们只是设置了服务,以便他们可以窃取授权令牌并用它们做很多讨厌的事情。
我需要一些可靠的方法来处理它。我已经考虑过在拦截器中使用一些正则表达式来检查 url。这是可能的,但忘记我的正则表达式会错过的某个情况也不难。