WWDC 2018:自动强密码与验证码自动输入

WWDC18 - Session 204 Automatic Strong Passwords and Security Code AutoFill 笔记

做者:我是 RocZhang,大四在读,目前在流利说作 iOS 开发git

我的做品:Adonis / Mr.Weather / YearTimerswift

关于我:https://www.roczhang.com/me/后端

在 iOS 12 中,Apple 将自动建议与使用强惟一密码的功能带入了 App 内,经过 QuickType bar 大幅简化了用户设置帐户与登录的繁琐操做。本 session 介绍了如何优化应用如何适配密码、安全码和其余自动填充功能,带给用户更安全与无缝的体验。安全

cover

Password AutoFill 自动密码填充

在 iOS 11 中,Apple 引入了自动填充密码。此功能可让用户经过点击键盘上方的 QuickType bar 快速完成用户名与密码输入过程。首先是对此功能的概要重述,重点包括:session

  1. 设置 Associated domains 关联域。iCloud Keychain Password Manager 中的密码是基于 Web 上的 domain 域(如 apple.com)来存储的。所以,就须要将 App 与 Web 上的域关联起来。关于 Password AutoFill 的详细功能,可见 WWDC 17 - Session 206 - Introducing Password AutoFill for Apps
  2. 标记好 Content types。在 iOS 11 中,UITextContentType 中添加了新类型:usernamepassword。只要给输入框设定好正确的 textContentType 便可。如:
// For user name text field
let userTextField = UITextField()
userTextField.textContentType = .username

// For password text field
let passwordTextField = UITextField() 
passwordTextField.textContentType = .password
复制代码

改进

  1. 在 iOS 11.3 中,WKWebView 支持了自动填入密码,若是登陆界面使用 Web 技术实现会颇有帮助。
  2. 在 iOS 12 中,从 App Store 中下载的其余密码管理应用也能够提供信息实现自动输入功能。只要开发者适配了 iCloud Keychain Password Manager 的 AutoFill,其余第三方密码管理应用也一样可以获得支持。若是你在开发密码管理应用,能够浏览 WWDC 18 - Session 721 - Implementing AutoFill Credential Provider Extensions

Password Saving 密码保存

在 iOS 12 中,Apple 提供了在 App 内新帐户登陆时保存密码凭证的功能。从而使得用户在全部设备上都能经过 iCloud Keychain 登陆你的 App 或网站。保存密码的工做原理是:app

  1. 推断登录场景;
  2. 基于关联 domain 检查资质;
  3. 查找用户名和密码字段;
  4. 检测登录操做;
  5. 提示用户保存或更新密码。

为确保兼容此功能,咱们须要检查的事件有:dom

  1. 为相关的输入框标记好 content type 内容类型;
  2. 当登陆事件发生时,将用户名与密码输入框从 view hierarchy 中移除。这样 Autofill 便可以检测到登陆事件正在进行。能够经过 dismiss 掉登陆场景的 View Controller 实现;
  3. 确保值在上述移除工做完成以后再清除登陆输入框中的内容,这样 Autofill 才能读到数据并将其保存;
  4. 检查 Autofill 保存的密码关联的是否为正确的 domain。能够经过保存后在设置界面中查看保存结果,如不正确,可经过 Web credentials associated domain service 覆盖其保存的位置。
  5. 若是以前手动经过 SecAddSharedWebCredential() 保存,如今可能不在须要使用它了.

总结关键点在于:ide

  1. 将 app 关联 domain;
  2. 为输入域作好标记;
  3. 确保登录检测。

Automatic Strong Passwords 自动强密码

Automatic String Passwords 提供生成建议用户名、密码与保存功能,经过几回点击即可以完成注册,将注册过程变得更加容易与安全。 工具

automaticStrongPasswords

Automatic Strong Passwords 的工做原理与上述的 Password Saving 工做原理大体类似:测试

  1. 推断 View Controller 类型;
  2. 基于关联的 domians 检查资质;
  3. 检测相关的注册表单元素,如用户名输入框与密码输入框;
  4. 提供建议用户名;
  5. 键入强密码;
  6. 用户注册后保存。

对此功能的兼容性检查表也与上述的 Password Saving 相似。 为配合此功能,在 iOS 12 中,UITextContentType 新增了 .newPassword 类型,咱们须要标记好本身 App 中的新密码输入框与密码确认输入框为 .newPassword。

对修改密码表单的注意事项:

  1. 用户名与新密码文本框应该在同一屏上;
  2. 用户名文本框能够是只读的;
  3. 在注册中的最佳实践一样适用于此。

默认生成密码的格式

  1. 长度为20个字符;
  2. 包括大字母、小写字幕、数字与连字符;
  3. 超过 71 位的熵;
  4. 设计上旨在与大多数服务兼容。

自动生成的密码例子:funrus-Hommez-kajzp7

固然,考虑到不一样的后端规则,也能够自定义自动生成强密码的格式。能够经过密码规则语言来定义规则,如:

let newPasswordTextField = UITextField()
...
let rulesDescriptor = "allowed: upper, lower, digit; required: [$];" newPasswordTextField.passwordRules = UITextInputPasswordRules(descriptor: rulesDescriptor)
复制代码

还可使用新的密码规则验证工具 - Password Rules Validation Tool

Security Code AutoFill 验证码自动填充

对于 iOS 12 以前用户来讲,收到短信验证码都须要人肉记忆,再手动输入到文本框中。iOS 12 与 macOS Mojave 中终于带来了自动输入验证码功能。一样在 UITextContentType 中新增了一种 .oneTimeCode 的类型。但因为依赖系统键盘 QuickType 输入,因此对于哪些取代系统键盘使用自定义界面输入验证码的场景没法使用。同时,在因此已支持的语言环境中均可用。验证码自动填充功能一样可以在 Safari Web 页面中使用。很是棒的一点是若是用户尝试在 Mac 上经过 Safari 登陆,iPhone 上收到的验证码信息将会被自动安全的传递到 Mac 上,以实如今 Mac 上一样可以轻点一下自动填充验证码。

这次自动输入的功能在 Safari 中一样有效,具体属性符对应以下:

Attribute iOS 12 (UITextContentType) Safari (input autocomplete="value")
UserName .username username
Existing Password .password current-password
New Password (for Automatic Strong Passwords) .newPassword new-password
One Time Code (for Security Code AutoFill) .oneTimeCode one-time-code

Federated authentication 联合身份验证

对于要支持使用第三方服务(如社交媒体帐号)登陆的状况,iOS 12 中引入了新的 API: ASWebAuthenticationSession。联合身份验证过程以下图所示:

federatedAuthentication
使用 ASWebAuthenticationSession 的好处在于:更快的登录流程、支持密码自动输入与验证码自动输入以及简单明了的基于 block 形式的 API。具体用法以下所示:

import AuthenticationServices
guard let oauthURL = URL(string: "https://www.example.com/oauth/...") else {
return
}
self.authenticationSession = ASWebAuthenticationSession(url: oauthURL, callbackURLScheme:
nil) { (callbackURL, error) in
guard error == nil, let callbackURL = callbackURL else {
}
// Process error.
return
// Process token.
}
self.authenticationSession.start()
复制代码

New password management features 密码管理新功能

iCloud Keychain Password Manager 中带了了一些与密码管理有关的新功能。如:经过询问 Siri 密码自动跳转到密码查看页以快速查看、密码内容支持经过 AirDrop 分享给他人、iOS 12 与 macOS Mojave 中的密码查看列表界面也通过了从新的设计、以及对在多个网站中使用相同密码的状况给予用户警告、tvOS 应用能够经过附近的 iOS 设备完成自动密码输入。

Summary 总结

在 iOS 12 与 macOS Mojave 中提供的这些密码相关功能很是强大,尽管许多功能可能可以自动适配工做,咱们仍须要测试本身的 app 来保证良好兼容。 同时,联想到近两天再次频繁爆出的国内大网站被脱裤的消息,开发者对安全问题都应该更加剧视。适配 Automatic Strong Passwords 相比其余 feature 来讲适配工做量并不会很是多,但可以很是明显的提高用户操做的连贯体验与安全性。

相关文章
相关标签/搜索