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

本文关键字:调用 Angular 授权 API REST 移动 应用 | 更新日期: 2023-09-27 18:06:46

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

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

我的问题是,当我去从我的后端API调用服务,我怎么能确保有人只是不读取内部javascript代码内的硬编码用户名/密码访问后端数据?

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

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

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

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

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

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

简短的回答:你不能。
长话短说:你可以(而且必须)验证客户端的行为,但不能验证客户端本身。
例如,我们可以看看《Pokemon Go》:几个小时后,机器人就可以玩了,几周后,Niantic开始使用机器学习软件工程师并使用unknown6算法加密其API来阻止机器人,但经过几天的努力,机器人又重新上线了。你可以使用这个世界上所有的安全方法(代价很高),但如果有人(有良好的软件工程知识)想要模仿你的客户端,我将达到他的目标