如何为我的移动应用程序的 REST API 调用授予 Angular 授权

Posted

技术标签:

【中文标题】如何为我的移动应用程序的 REST API 调用授予 Angular 授权【英文标题】:How to Grant Angular Authorization to my REST API Calls for Mobile App 【发布时间】:2017-01-20 08:42:13 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

多么棒的答案。谈到这一点,我经常有同样的想法,因为任何有足够的愿望和技能来获得它的人,都会......你所包含的这些小宝石是至少让它变得更困难一些的方法,但没有什么会使用这些类型的应用程序是 100% 安全的。幸运的是,该应用程序没有持有商业机密或任何关键信息,所以这应该会有很大帮助!再次感谢!【参考方案2】:

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

【讨论】:

以上是关于如何为我的移动应用程序的 REST API 调用授予 Angular 授权的主要内容,如果未能解决你的问题,请参考以下文章

如何为 django-rest-framework api 编写单元测试?

使用 REST API 的 Spring Security 身份验证?

ReST API 安全性

Django Rest Framework api如何为所有人添加身份验证权限

如何为 LOB 应用程序中的多个视图设计 REST API

如何为 Firebase Dynamic Link Analytics Rest API (NodeJS) 获取正确的访问令牌