如何授予 Angular 对我的 REST API 移动应用调用的授权

How to Grant Angular Authorization to my REST API Calls for Mobile App

我有一个 C# Azure Web API 后端,其中从前端 Ionic 移动应用程序(基本上是一个 Angular 应用程序)检索数据

用户的授权是通过 Ionic 的云服务完成的,因此他们处理了通过 FB、Twitter、basic (username/password) 注册用户的繁重工作。

我的问题是,当我从后端 API 调用服务时,我如何才能确保有人不会读取内部 javascript 中的硬编码 username/password ] 访问后端数据的代码?

我知道这很牵强,但 API 是否知道请求实际上来自应用程序(Android 和 iOS),而不仅仅是来自有人试图从未经授权的网络浏览器插入数据和评论?

由于您从 JavaScript 调用最终用户可用的 API,您可以假设您的 JavaScript 和其中包含的所有 logic/credentials所有人都可以访问。

有相当安全的方法解决这个问题,FB/Twitter 和他们的同类已经实现了它(使用 OAuth)。本质上,在将凭据传递给 API 时,会生成一个令牌,然后将其用于对 API 的后续调用而不是凭据。

您可以避免人们使用 nonces 随机触发 'unauthorized' 请求,这些请求是在您呈现表单时生成的,并且只能用于提交有问题的表单一次。然后,您可以在 API 端限制随机数的有效性。不幸的是,它并非万无一失,但这将限制您可能受到的任何类型的 'brute-force' 攻击的损害。

同样,对于任何共享的 'secret'(这将保证请求的来源),您必须假设任何有足够意志力的人都能够从应用程序中提取它,因此您在此处实施的任何方法都将100% 万无一失。也许您能做的最好的事情就是为每个设备上的每个用户生成一个共享密钥。

简答:不能。
长答案:您可以(而且必须)验证客户端的行为,但不能验证客户端本身。
例如,我们可以看看 Pokemon Go:几个小时后,机器人就可以玩了,几周后,Niantic 开始担任机器学习软件工程师,并使用 unknown6 算法对其 API 进行加密停止了机器人,但经过几天的努力,机器人又上线了。
您可以使用这个世界的所有安全方法(费用很高)但是如果有人(对软件工程有很好的了解)最后想模拟您的客户,我会联系他的 objective