Authentication 如何验证没有用户凭据的移动应用程序?

Authentication 如何验证没有用户凭据的移动应用程序?,authentication,mobile,aws-lambda,jwt,aws-api-gateway,Authentication,Mobile,Aws Lambda,Jwt,Aws Api Gateway,我有一个与API交互的手机游戏。我希望仅从此移动应用程序调用此API。 解释起来很简单,但另一方面,它的简单使它混乱 没有用户,因此没有用户凭据。这是一个从API请求图像的开放游戏 我不想实施的事情: Hardcodedsecret/apikey/token等->任何内容都不能硬编码 一次性密码->无需通过短信、电子邮件、推送通知或任何用户交互进行OTP 设备ID或广告ID->好的解决方案,但任何其他应用程序也会获得此ID,然后调用我的API。另外,任何攻击者都可以将任何内容作为设备ID发送,对

我有一个与API交互的手机游戏。我希望仅从此移动应用程序调用此API。 解释起来很简单,但另一方面,它的简单使它混乱

没有用户,因此没有用户凭据。这是一个从API请求图像的开放游戏

我不想实施的事情:

  • Hardcoded
    secret/apikey/token等->任何内容都不能硬编码
  • 一次性密码
    ->无需通过短信、电子邮件、推送通知或任何用户交互进行OTP
  • 设备ID
    广告I
    D->好的解决方案,但任何其他应用程序也会获得此ID,然后调用我的API。另外,任何攻击者都可以将任何内容作为设备ID发送,对吗?那么,如何验证此设备ID是现有设备的真实标识符
  • 使用
    Unity3D
    开发的游戏。 API由
    AWS API网关
    Lambda
    组成。我正在考虑使用AWS
    Cognito
    作为身份验证服务器


    谢谢你的想法

    我还没有完成这个具体的实现,但我认为您可以执行以下操作:

    1) 配置API网关以使用IAM auth()

    2) 使用Cognito,您应该配置您的身份池以允许未经身份验证的用户,并相应地调整您的Cognito未经身份验证的身份的权限(此处的一些信息:)

    3) 您可以使用Amplify SDK在应用程序中检索未经身份验证用户的临时AWS凭据,并点击API网关(此处有好的步骤:此处有关于Amplify的更多信息:)

    移动应用程序的API服务器锁定 我有一个与API交互的手机游戏。我希望仅从此移动应用程序调用此API。解释起来很简单,但另一方面,它的简单让我感到混乱

    在软件开发中,容易解释的事情可能很难实现,这是常见的情况之一

    因此,您希望实现的是将您的API服务器锁定到您的移动应用程序,或者换句话说,确保您的API服务器只响应您上传到官方商店的正版未经篡改的移动应用程序发出的请求

    您提到没有用户:

    没有用户,因此没有用户凭据。这是一个从API请求图像的开放游戏

    但我认为您可能想说,您没有经过验证的用户,即使您拥有这些用户,您也只能识别请求中的,而不是请求的执行者

    这是开发人员之间的一个常见误解,无论是初级还是高级,因此正确地清除它对于为您的移动应用程序开发有效的安全解决方案非常重要

    访问API服务器的用户和用户之间的差异 我写了一系列关于API和移动安全的文章,其中一篇文章对这一差异进行了很好的描述,这篇文章是您想要阅读的文章,目的是更好地理解访问API服务器的用户和用户之间的差异,但我将在这里摘录其中的主要收获:

    什么是向API服务器发出请求的东西。它真的是你的移动应用程序的真实实例,还是一个机器人、一个自动脚本或一个攻击者用Postman之类的工具在你的API服务器上手动戳来戳去

    是移动应用程序的用户,我们可以通过多种方式进行身份验证、授权和识别,比如使用OpenID Connect或OAUTH2流

    将API服务器能够对数据进行身份验证和授权访问的用户设想为,并将什么设想为代表用户发出请求的软件

    因此,在您的情况下,您不必担心请求中的,而是想知道请求执行的是什么,这样您就可以将API服务器锁定到真正的移动应用程序上

    硬编码标识符 硬编码秘密/apikey/令牌等->任何内容都不能硬编码

    这是一个非常明智的决定,因为从你发布一个移动应用程序的那一刻起,它里面的任何敏感数据都必须被认为是被破坏的,因为有很多开源工具可以帮助任何人对移动应用程序二进制文件执行静态和动态分析,以提取数据和/或改变应用程序的行为。此类工具的示例包括:

    Mobile Security Framework是一个自动化的多功能移动应用程序(Android/iOS/Windows)笔式测试框架,能够执行静态分析、动态分析、恶意软件分析和web API测试

    将您自己的脚本注入黑盒进程。钩住任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击保存,并立即查看结果。所有这些都没有编译步骤或程序重新启动

    运行时标识符 设备ID或广告ID->好的解决方案,但任何其他应用程序也会获得此ID,然后调用我的API。另外,任何攻击者都可以将任何内容作为设备ID发送,对吗?那么,如何验证此设备ID是现有设备的真实标识符

    该标识符在运行时可以通过Frida或Cydia等框架轻松地进行操作/提取,因此,正如您已经猜到的那样,攻击者可以利用这些标识符

    现在,如果您指的是更高级的标识符,如Android SafetyNet和/或,那么我想提醒您注意一些细节:

    安卓安全网

    你可能想阅读我的问题,Android相当于ios devicecheck,它非常详细地说明了什么是和什么不是

    但简言之,它不是设计用来作为一个立场