在使用Angular时保持API共享机密的安全



我们有一个现有的API,我们的一些外部应用程序(Docker Containers等(使用它来回调我们的服务器。它使用HMAC(共享秘密(系统进行保护。这在从一台服务器到另一台服务器进行调用时非常有效。

但是,我们即将开始慢慢地将我们的网站形式.NET Web Forms转换为Angular(v6(,我们希望Angular能够使用相同的API和相同的安全性。

我们设想的是一个单独的Angular库,称为AngularAPICall,它在每个会话开始时实例化,接受公钥和共享密钥作为参数。然后,每当Angular需要回调服务器时,它都会调用AngularAPICall内部的方法,该方法使用公钥和共享密钥来创建所需的哈希值并构建API调用头。

但是,当在Angular这样的原生客户端平台上使用共享密钥时,我们不确定如何确保其安全。我们在哪里/如何存储共享机密?把它放在web.config中不会有任何好处。除了存储它,我们如何将它传递到客户端库AngularAPICall并保持它的安全?我们如何坚持它,以便在通话之间保持它?

或者。。。我们是不是走错了路?我们是否应该重新考虑如何处理我们在Angular中使用的API安全性?

在客户端中包含任何敏感数据都是一个巨大的安全问题。任何用户都可以使用开发工具操纵客户端,并且它不应该包含任何类型的共享机密

在一天结束的时候,添加一个像Angular或React这样的框架可以让你更容易地构建一个漂亮的UI,它不会以任何方式保护你。

任何类型的网络应用程序都需要一层额外的身份验证,因为任何查看网络的人都可以截获一个简单的秘密。

我建议使用oAuth或JWT令牌来验证有效请求。理论上,只有当API端点带回敏感信息时,它们才应该受到保护。我假设有人在这方面登录了这个平台。这些令牌是从服务器生成的,它们在客户端中用于发出请求。您可以假设,如果用户登录并生成了第一个JWT令牌,那么您可以将其传递给API请求,因为它只能在经过身份验证的用户的客户端上查看。

当你进入网络的大世界时,你需要一些身份验证来保护你的API,而且那里有负载。你上面所做的事情很快就会被任何人入侵。重新思考您的身份验证模式,记住服务器永远不应该信任客户端!

我会重新思考如何从前端使用API。也许可以研究一下angular应用程序可以验证的API网关。

这个问题的公认答案是:https://softwareengineering.stackexchange.com/questions/361949/how-to-secure-web-services-when-authentication-is-done-at-client-side-frontend在这里似乎非常相关,但ymmv关于你如何实现它。

最新更新