在Swift上存储API密钥的位置?

时间:2017-02-18 05:14:22

标签: ios swift swift2 stripe-payments api-key

我有一堆API密钥和秘密(Stripe,Cloudinary等),目前我的应用程序中已对其进行了硬编码。存放它们的正确位置在哪里?它们应该在服务器中吗?我只是将服务器URL存储在我的最后(如果密钥更改,应用程序将继续工作)?

例如,我在我的app委托文件中有这个:

    func configureStripe(){
            STPPaymentConfiguration.sharedConfiguration().publishableKey = "pk_test_1234rtyhudjjfjjs"         

STPPaymentConfiguration.sharedConfiguration().appleMerchantIdentifier = "merchant.com.myapp"
    }

6 个答案:

答案 0 :(得分:1)

没有最好的办法。这取决于很多事情。看看这个答案 - https://stackoverflow.com/a/14865695/1760199,并选择最方便的方式。

答案 1 :(得分:1)

有很多存储密钥的工具。

  1. https://nshipster.com/secrets/
  2. https://www.freecodecamp.org/news/how-to-securely-store-api-keys-4ff3ea19ebda/

如果是个人项目,我通常会选择xccconfig,而忽略git中的该文件,但是对于团队来说,这可能很难。

答案 2 :(得分:0)

答案 3 :(得分:0)

就Stripe而言,没有什么大不了的,因为Stripe正是出于这一考虑而设计的,因此他们承担PCI合规性方面的财务责任。他们具有更复杂的方法来验证用户身份并限制访问。

答案 4 :(得分:0)

首先,您需要记住,攻击者可能会获取与应用程序一起交付的每段代码。任何一种混淆都无法保护它,只会使攻击更加昂贵和耗时。

因此,您不应在源代码中保留任何敏感密钥或秘密。您需要考虑用于存储机密的服务器端解决方案。服务器端解决方案将介于您的应用和您实际上要调用的API之间。

答案 5 :(得分:-2)

最佳做法是在某个类或控制器上将您的字符串api url放在平面文本中,而不要输入信息。

我使用帮助类:

class ApiUrl
{
    static var api = "www.api.com/api/"
}

let api = ApiUrl.api