【发布时间】:2017-07-07 18:29:00
【问题描述】:
我有一堆 API 密钥和机密(Stripe、Cloudinary 等),目前在我的应用程序中进行了硬编码。存放它们的正确位置在哪里?它们是否应该在服务器中,而我只是将服务器 URL 存储在我的末尾(这样如果密钥发生更改,应用程序将继续工作)?
例如,我的应用委托文件中有这个:
func configureStripe(){
STPPaymentConfiguration.sharedConfiguration().publishableKey = "pk_test_1234rtyhudjjfjjs"
STPPaymentConfiguration.sharedConfiguration().appleMerchantIdentifier = "merchant.com.myapp"
}
【问题讨论】:
-
是的,密钥绝对应该只在您的服务器上,并且永远不会在客户端代码中。
-
如果您想将它们存储在客户端,我相信使用像
SSKeyChain这样的库会有所帮助 -
我不确定 Cloudinary 但使用 Stripe,您在客户端上使用的密钥是可发布密钥。对于与 API 的任何交互,条带化认为这不是安全的。这就是为什么您需要使用您的其他私钥从服务器执行所有操作的原因。永远不要存储任何私人客户端,但如果绝对必要,请不要在应用程序中硬编码或存储在 plist 中。一种选择是从您的应用程序向您的后端发出网络请求,以获取密钥、使用 SSL 并存储在钥匙串中。仍然不完全安全,但应该做任何不是主要敏感的事情。
标签: ios swift swift2 stripe-payments api-key