【问题标题】:API keys and secrets used in iOS app - where to store them?iOS 应用程序中使用的 API 密钥和秘密 - 在哪里存储它们?
【发布时间】:2013-05-25 22:39:09
【问题描述】:

我正在为 iOS 开发,我需要使用 API 密钥和秘密向某些 API 发出请求。但是,我不希望它在我的源代码中公开,并且在我推送到我的存储库时泄露机密。

这种情况的最佳做法是什么?将它写在一个单独的文件中,我将包含在 .gitignore 中?

谢谢

【问题讨论】:

    标签: ios git api-key


    【解决方案1】:

    将它写在一个单独的文件中,我将包含在 .gitignore 中?

    不,永远不要写它。
    这意味着:

    • 您不会在您的存储库中写入该秘密(无需 gitignore 它,或者担心错误地添加/提交/推送它)
    • 您不会将其写入本地驱动器的任何位置(无需担心您的计算机被盗,上面有那个“秘密”)

    在您的存储库中存储一个脚本,该脚本能够从外部来源(从 gi​​t 存储库外部)寻找该秘密并将其加载到 内存中
    这类似于git credential-helper process,并且该脚本将启动一个侦听localhost:port 的进程,以便仅在当前会话中需要时为您提供该“秘密”。
    会话完成后,就没有任何痕迹了。
    这是管理机密数据的最佳做法。

    如果您在 .gitattributes 文件中将其声明为内容过滤器,则可以在 git checkout 上自动触发该脚本:

    【讨论】:

    • 按照您的建议并将其写在一个我不会提交的单独文件中(因为它将在 gitignore 中),我没有得到区别。如果我按照您的建议进行操作,我如何才能在我的 iOS 应用程序中检索这些键的值(“在内存中”在这一点上有点模糊,不是吗?)。谢谢你的回答!
    【解决方案2】:

    这是一个非常古老的问题,但如果有人在 google 中看到这个问题,我建议您尝试使用 CloudKit 来存储任何应用程序机密(API 密钥、Oauth 机密)。只有您的 app 可以访问您的 app 容器,Apple 和您的 app 之间的通信是安全的。 您可以查看here

    【讨论】:

    • 如果用户关闭了 iCloud 怎么办?如果我们进入隧道并且网络不可用怎么办?
    • 用户不需要开启 iCloud。您的应用程序公共数据库始终可用。至于您的第二点,如果您使用这些密钥来发起网络调用,它将以任何方式失败。您不必每次都调用 CloudKit,只要您从服务器获取它就可以使用钥匙串安全地存储它。关键是不要将其与应用程序一起提供。
    • 抱歉,我最初的评论被截断了。我在上面回答了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多