Ios 我应该将密码保存在共享web凭据和(本地)密钥链中吗
我正在为一个新应用程序设计一个登录名,该应用程序将与一个域相关联,即与SPA相对应。 显然我想用Ios 我应该将密码保存在共享web凭据和(本地)密钥链中吗,ios,keychain,shared,Ios,Keychain,Shared,我正在为一个新应用程序设计一个登录名,该应用程序将与一个域相关联,即与SPA相对应。 显然我想用 iOS 11密码自动填充,以及 共享Web凭据 我已经阅读了有关autofill的文档,并观看了WWDC的视频。此外,我还检查了共享Web凭据,我认为它比新的、经过修改的autofill旧。该条建议: 不要将共享web凭据用作安全用户凭据的主存储。相反,将用户的凭据保存在密钥链中,并且仅当在密钥链中找不到登录凭据时才使用共享web凭据 这让我觉得有点奇怪,因为 -意味着我必须涵盖更多可能的不一致
- iOS 11密码自动填充,以及
- 共享Web凭据
- 首次启动:应用程序在登录屏幕上启动,并通过自动填充提供用户名/密码
- 用户登录:应用程序在共享用户默认值中保存一个简单标志,指示用户已登录
- 应用程序被重新启动,例如,在设备重新启动后:应用程序由于标志而跳过登录屏幕,并从共享的web凭据中获取密码和用户名(当然,假设用户先前授予了它权限)
- 用户显式注销:应用程序删除标志,基本上将所有内容设置回首次启动
- 用户从共享web凭据中删除用户名和密码(例如,在设置应用程序中或在macOS上使用Keychain Access):应用程序一旦检测到这一点(例如,在尝试远程请求时或在重新启动后),无论标志如何,都会立即返回登录屏幕。我认为这最符合用户的意图(如果你删除了一个密码,你不想让一些应用程序在你注销之前一直保留它)
编辑地址@Aaron的答案: 非常感谢你提供的信息。您的回答帮助我意识到我误解了共享web凭据的某些内容:我假设对于具有关联域的应用程序,您可以在没有用户交互的情况下访问凭据(可能在初始授权之后)。当应用程序请求凭据时,您可以在macOS上设置复选框。我现在意识到这是错误的,在iOS上,您必须始终与用户进行验证,谢谢 为了完整起见,我仍然想指出你说的一些其他事情:
- 您是对的,我们最终将使用基于令牌的身份验证,因此我将把它保存在密钥链中(可能除了密码之外,请参见下文)。一开始我只是想让这个问题足够简单
- 我们的应用程序就像一个电子邮件客户端,您可以在其中更新新收到的“邮件”。因此,用户默认设置中提到的“登录标志”只是指示应用程序是否应该像订阅收件箱一样运行。就像在邮件中一样,即使在重新启动后,您也不需要登录
- 因此,我可能最终会将用户密码与令牌一起保存在(本地)密钥链中。如果令牌过期,我可以在没有用户交互的情况下请求一个新的令牌,这在我们的一般网站和应用程序设计中很重要。只有当请求失败时,我才会使用共享的web凭据(在过程中更新我的本地凭据副本)
- 你提到的最后一点可能值得商榷。例如,在macOS上(您可以编辑整个钥匙链,而不仅仅是Safari密码),您实际上会从应用程序中注销。邮件,再一次,作为一个例子。如果收件箱的钥匙链项目不见了,邮件会在下次启动时重新请求,并尝试访问内容(从某种意义上说,这是一种“类似”的登录)
再次感谢您的回答,现在我可以结束一个开放的待办事项了。:)还要感谢@HamZa提供的赏金 考虑到这一建议: 不要将共享web凭据用作secur的主存储