代码之家  ›  专栏  ›  技术社区  ›  Curt Rand

iosapi密钥:在发出http请求时,有没有一种真正安全的方法来保护API密钥?

  •  0
  • Curt Rand  · 技术社区  · 6 年前

    目前,我正在从服务器获取一个API密钥,然后登录并使用它发出http请求。我目前将API密钥存储在iPhone应用程序的数据库中。不过,我听说我应该把它存放在 keychain 从同事那里。所以,我在Stackoverflow上搜索,看到了关于这个的问题。似乎这并不是一种真正安全的存储API密钥的方法。

    Secure keys in iOS App scenario, is it safe?

    In iOS, how can I store a secret "key" that will allow me to communicate with my server?

    我不知道如何阻止黑客从iOS应用程序中获取API密钥的反向工程。StackOverflow上的一位用户基本上说,它只会使事情变得过于复杂,几乎没有任何好处。

    我需要找到职位,但有人建议,只要确保你正在作出一个安全的API请求(SSL证书),你有办法删除API密钥,如果有人被黑客攻击。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Exadra37    6 年前

    正如@jake已经指出的,你应该使用一个只绑定到用户的令牌,而不是所有用户的Api密钥,但是在执行http请求时,可以做其他增强来进一步保护你的应用程序。

    用户令牌可以是签名的JWT令牌,然后您可以通过证书固定增强服务器和应用程序之间通信的安全性,以防止中间人攻击。

    here .

    can be bypassed 通过挂钩框架,如 Xposed 包含特定于绕过锁定的模块,但还有另一层安全性,一旦它增加了在设备上破解应用程序所需的工作量,并且将保护应用程序免受中间人攻击,您就不应放弃它。

    为了确保应用程序和后端之间的最终安全,您应该使用应用程序完整性证明服务,该服务将通过使用集成在应用程序中的SDK和在云中运行的服务,在运行时保证您的应用程序未被篡改或未在根设备中运行。

    在成功证明应用完整性时,将发布JWT令牌,并使用只有您的应用后端和云中的证明服务知道的秘密进行签名;在失败时,将使用应用后端不知道的假秘密对JWT进行签名,从而允许应用后端仅在能够验证的情况下为请求提供服务JWT令牌中的签名,并在验证失败时拒绝它们。

    一旦云认证服务使用的秘密不为应用程序所知,就不可能在运行时对其进行反向工程,即使应用程序被篡改、在根设备中运行或通过作为中间人攻击目标的连接进行通信。

    你可以在网上找到这样的服务 Approov 包括IOS在内的多个平台都有SDK。集成还需要在应用程序后端代码中进行一次小检查,以验证JWT令牌,以便后端能够保护自己免受欺诈性使用。

    JWT Token

    基于令牌的身份验证

    jsonweb令牌是一种开放的、行业标准的rfc7519方法,用于在双方之间安全地表示声明。

    Certificate Pinning

    固定是将主机与其期望的X509证书或公钥相关联的过程。一旦知道或看到主机的证书或公钥,该证书或公钥就会关联或“固定”到主机。如果可以接受多个证书或公钥,那么程序将持有一个pinset(摘自Jon Larimer和Kenny Root Google I/O talk)。在这种情况下,公布的标识必须与pinset中的一个元素匹配。

    OAUTH2

    OAuth2.0授权框架支持第三方 应用程序获取对HTTP服务的有限访问 在资源所有者和HTTP服务之间,或者通过允许 第三方申请以自己的名义获得访问权。这个 在RFC 5849中。

        2
  •  0
  •   Jake    6 年前

    更安全的机制是在登录时返回身份验证令牌。此身份验证令牌对于用户应该是唯一的。如果您在后端有适当的授权和安全机制(以减轻DDOS攻击、注入攻击、用户访问其他用户数据等),那么谁会关心他们是否从密钥链或存储在何处获得授权令牌?由于身份验证令牌绑定到他们的帐户,因此您可以使令牌失效,以便在用户恶意时停止工作。如果你在后台有正确的机制,你甚至可以完全禁用他们的帐户。

    许多安全机制可以在后端实现自动化。像AWS这样的平台可以很容易地配置为自动禁用对后端进行某些恶意调用的帐户。

    推荐文章