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 來講適配工做量並不會很是多,但可以很是明顯的提高用戶操做的連貫體驗與安全性。

相關文章
相關標籤/搜索