我在我的应用程序中执行“记住我”功能,我遇到了将所有凭据存储在钥匙串(keychain)中的解决方案和仅将密码存储在钥匙串(keychain)中的解决方案?存储的密码我只想在身份验证时使用,但是我更多地使用用户名,而不是必须从后端获取它,我可以从磁盘中获取它。所提到的解决方案中的一种是否比另一种更好?
身份验证后,如果我采用拆分解决方案,我会这样做:
let hasLoginKey = NSUserDefaults.standardUserDefaults().setBool(true, forKey: "loginKey")
NSUserDefaults.standardUserDefaults().setValue(username, forKey: "username")
最佳答案
你问的是“推荐”。推荐的做法是根本不存储密码。设计您的服务,使其接受该服务独有的访问 token 。您接受用户名和密码,服务器返回给您一个访问 token ,您存储访问 token ,然后丢弃密码(可能还有用户名)。 OAuth 是实现这一点的标准化方式,具有可用的通用服务器和客户端框架。 (虽然 OAuth 的复杂性让我有点发疯,但它确实是一个很好的协议(protocol),而且非常标准。)
存储授权 token 的正确位置是钥匙串(keychain)。正如 Zaph 指出的那样,“双重加密” secret 不会给您带来任何好处,因为您现在有另一个 secret (加密 key )要存储。你把它存放在哪里?如果您有一个更安全的地方来存储您的加密 key ,请将 token 放在那里。如果使用硬编码 key 稍微混淆它会让您感觉更好,那很好,但安全优势非常小。
如果您不能按照推荐的方式设计您的服务,并且必须存储原始密码,则将其存储在钥匙串(keychain)中。往上看。所有相同的论点都适用。钥匙串(keychain)是手机上最安全的地方。这并不意味着它牢不可破。这只是意味着它比您存放东西的任何其他地方都不易碎。
关于ios - 存储用户凭据 iOS 的推荐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39225375/