0

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

用户的授权是通过 Ionic 的云服务完成的,因此他们处理通过 FB、Twitter、基本(用户名/密码)注册用户的繁重工作。

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

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

4

2 回答 2

2

由于您从可供最终用户使用的 JavaScript 调用 API,因此您可以假设您的 JavaScript 和其中包含的所有逻辑/凭据可供所有人访问。

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

您可以避免人们使用呈现表单时生成的随机数随机触发“未经授权”的请求,并且只能使用一次来提交相关表单。然后,您可以在 API 端对 nonce 的有效性进行时间限制。不幸的是,这不是万无一失的,但这将限制您可能受到的任何“蛮力”攻击的损害。

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

于 2016-09-12T20:39:40.927 回答
1

简短的回答:你不能。
长答案:您可以(并且必须)验证客户端的行为,但不能验证客户端本身。
例如,我们可以看看 Pokemon Go:几个小时后,机器人就可以玩了,几周后,Niantic 开始担任机器学习软件工程师并使用unknown6停止机器人的算法加密其 API,但几天后辛勤工作的机器人再次上线。
你可以使用这个宇宙中所有的安全方法(花费高昂),但是如果有人(对软件工程有很好的了解)想在最后模仿你的客户,我会达到他的目标

于 2016-09-12T20:47:32.037 回答