【问题标题】:Best way in iOS and Swift to store a server-supplied credential between app launchesiOS 和 Swift 在应用程序启动之间存储服务器提供的凭据的最佳方式
【发布时间】:2017-09-27 00:00:03
【问题描述】:

我需要在应用启动和设备重启之间存储一个持久记忆令牌(一个字符串)。一旦我的用户登录到应用程序及其后端服务(已经构建),该令牌将由服务器提供。具体来说,我需要为记忆标记设置一个持久数据占位符,但我不希望代码实际设置该占位符的值。

一方面,NSUserDefaults(现在称为UserDefaults)似乎是一种简单的方法,但在阅读文档后,似乎这不是该功能的意图。我看到的所有文档都显示了通过为键分配值来进行设置。我绝对不想让应用程序为该键分配值。

最简单的方法是什么?

【问题讨论】:

  • 不清楚你真正想要什么......我知道你想存储一个字符串(你的 token)然后 UserDefaults 是解决方案,你为什么拒绝?只需将您的令牌存储为您选择的密钥(“令牌”或“凭据”)的值。因此,您将能够检索给定 keu 的令牌。
  • 不清楚如何只设置数据结构而不应用值。
  • 你的应用程序中的某些东西必须做一些事情来使你的令牌持久化。如果分配值不是一种选择,您如何想象保存收到的信息?
  • 一种选择是使用钥匙串将令牌和凭据等元素安全地存储到设备中。与 UserDefaults 不同,卸载应用程序后信息不会被删除。恢复出厂设置将重置钥匙串。所以钥匙串应该适合存储你的令牌。 Apple 提供了一个用于访问钥匙串功能的包装类:gist.github.com/vtourraine/1409718
  • 我不知道你想要什么。您正在从您的服务器获取一个令牌,并且您想保存它。但是您也说您不希望您的代码保存该值。你想保存还是不保存?如果你这样做了,你不希望你的代码保存值是什么意思?

标签: ios swift3 persistent-storage persistent-data


【解决方案1】:

在考虑安全性的同时实现这一目标的最简单方法是使用钥匙串。存储在 Keychain 中的数据使用密钥加密,例如在设置 Touch ID 支持时。

您永远不应该将 UserDefaults 用于此类任务。原因是 UserDefaults 由简单的、未加密的 .plist 文件支持,该文件是捆绑包的一部分,任何可以访问您的 ipa 的人(例如,任何拥有越狱设备的人)都可以或多或少地轻松查看。

KeychainAccess API 是用 Objective-C 编写的,但是有许多使用 Swift 封装它的包装器。你可以在https://github.com/kishikawakatsumi/KeychainAccess上使用它

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多