use*_*704 6 .net c# asp.net angular
我们有一个现有的 API,一些外部应用程序(Docker 容器等)使用它来回调我们的服务器。它使用 HMAC(共享密钥)系统进行保护。当从一台服务器向另一台服务器进行调用时,这非常有用。
但是,我们即将开始将我们的网站从 .NET Web 表单慢慢转换为 Angular (v6),我们希望 Angular 能够使用相同的 API 和相同的安全性。
我们设想的是一个单一的 Angular 库,称为类似 的东西AngularAPICall
,它在每个会话开始时实例化,它接受公钥和共享秘密作为参数。然后,每次 Angular 需要回调服务器时,它都会调用 内部的方法AngularAPICall
,该方法使用公钥和共享密钥来创建所需的哈希值并构建 API 调用标头。
但是,我们不确定在 Angular 等本机客户端平台上使用共享密钥时如何保证共享密钥的安全。我们在哪里/如何存储共享秘密?把它放在 web.config 中不会有任何好处。除了存储它之外,我们如何将它传递到客户端库AngularAPICall
并保证其安全?我们如何持久化它以便在调用之间保持它?
或者……我们处理这个问题的方式是错误的吗?我们是否应该重新思考如何处理 Angular 中使用的 API 安全性?
客户端中存在任何敏感数据是一个巨大的安全问题。任何用户都可以使用开发人员工具来操纵客户端,并且它不应该包含任何类型的任何共享秘密。
归根结底,添加像 Angular 或 React 这样的框架可以让您更轻松地构建漂亮的 UI,但它不会以任何方式保护您。
任何类型的 Web 应用程序都需要额外的身份验证层,因为任何查看网络的人都可以截获简单的秘密。
我建议使用oAuth或JWT令牌来验证有效请求。理论上,只有 API 端点带回敏感信息时才应受到保护。我假设人们正在这方面登录这个平台。这些令牌是从服务器生成的,并在客户端中使用它们来发出请求。您可以假设用户已登录并生成第一个 JWT 令牌,您可以将它们传递给您的 API 请求,因为它只能在经过身份验证的用户的客户端上查看。
当您进入网络的广阔世界时,您需要一些身份验证来保护您的 API,并且那里有大量负载。您上面所做的事情很快就会被任何人攻击。重新考虑您的身份验证模式,记住服务器永远不应该信任客户端!