0

通常使用包含秘密令牌的授权标头对 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。这是可能的,但忘记我的正则表达式会错过的某个情况也不难。

4

1 回答 1

0

令牌总是通过电线发送,我想这是其中最脆弱的部分。

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

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

于 2014-09-03T20:56:25.713 回答