【发布时间】:2018-07-16 17:11:18
【问题描述】:
我们有一个现有的 API,我们的一些外部应用程序(Docker 容器等)使用它来回调我们的服务器。它使用 HMAC(共享密钥)系统进行保护。这在从一台服务器向另一台服务器进行调用时非常有用。
但是,我们即将开始慢慢地将我们的网站表单 .NET Web 表单转换为 Angular (v6),我们希望 Angular 能够使用相同的 API 和相同的安全性。
我们设想的是一个单一的 Angular 库,称为 AngularAPICall,它在每个会话开始时实例化,它接受公钥和共享密钥作为参数。然后,每次 Angular 需要回调服务器时,它都会调用 AngularAPICall 内部的一个方法,该方法使用公钥和共享密钥来创建所需的哈希值并构建 API 调用标头。
但是,当在 Angular 等本地客户端平台上使用共享密钥时,我们不确定如何保证共享密钥的安全。我们在哪里/如何存储共享密钥?将它放在 web.config 中不会有任何好处。除了存储它,我们如何将它传递到客户端库AngularAPICall 并保证它的安全?以及我们如何持久化它以便在调用之间保持它?
或者……我们是不是走错了路?我们是否应该重新考虑如何处理我们在 Angular 中使用的 API 安全性?
【问题讨论】:
-
是的,恐怕没有任何秘密可以在客户端应用程序中真正得到保护,因为所有代码都将下载到用户机器上。可以说无处可藏
-
不知道为什么会有一个近距离投票,这是一个有效且详细的问题。