[WWDC18] Password AutoFill の新機能 #WWDC18
本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。
はじめに
本セッションでは Password AutoFill まわりの新機能が発表されました。
複雑なパスワード入力や強力なパスワード生成をサポートする機能です。
セッションで話された内容は以下の 5 つです。
- Password AutoFill
- Automatic Strong Passwords
- Security Code AutoFill
- Federated Authentication
- New iCloud Keychain Password Management Features
Password AutoFill
Password AutoFill は 2017 の WWDC で発表された、ログイン画面でユーザー名とパスワードの入力を自動化するためのサポート機能です。
- アプリとドメインの関連付けが重要
- QuickType bar にクレデンシャルが表示される
- アプリの entitlements と Web サーバーでの設定が必要
Password AutoFill についての詳細はこちらの記事をご覧ください。
Password AutoFill を利用するためには UITextField のプロパティ textContentType
に適切なタイプを指定する必要があります。
- username
- ユーザー名の UITextField に設定
- password
- パスワードの UITextField に設定
パスワードの保存
Password AutoFill ではパスワードの保存は次のように処理されます。
- ログインシナリオを推測する
- 関連するドメインに基づいて適格性をチェックする
- ユーザー名とパスワードの入力フィールドを見つける
- ログインアクションを検知する
- パスワードの保存または更新を促す
パスワード保存時のチェックリストは以下。
- 入力フィールドに適切な textContentType を指定する
- それらのフィールドをビューの階層から削除する
- ビューの階層から削除した後のみ、それらのフィールドをクリアする
- 正しいドメインに AutoFill がパスワードを保存したことをチェックする
- これらを行えば従来の
SecAddSharedWebCredential()
メソッドは不要になる
かな?
すみませんが、ここは試していないので確証は無いです。
Password AutoFill で重要なこと 3 つ。
- アプリとドメインを関連付ける
- フィールドに適切な textContentType を指定する
- ログインの検知を確実にする
Automatic Strong Passwords
Password AutoFill ではパスワードの自動生成は次のように処理されます。
- ビューコントローラのタイプを推測する
- 関連するドメインに基づいて適格性をチェックする
- 関連する要素からサインアップを検出する
- ユーザー名をサジェストする
- 強力なパスワードを入力する
- ユーザーがサインアップした後、パスワードを保存する
iOS 12 では textContentType
に newPassword
という項目が追加されました。
パスワードの自動生成機能を利用する場合はこの値を指定する必要があります。
ユーザー名用の UITextField
1 2 | let userTextField = UITextField() userTextField.textContentType = .username |
新しいパスワード用の UITextField
1 2 3 4 5 | let newPasswordTextField = UITextField() newPasswordTextField.textContentType = .newPassword let ConfirmNewPasswordTextField = UITextField() ConfirmNewPasswordTextField.textContentType = .newPassword |
また、UITableView で画面を作成する場合は 1 つのセルに 1 つの UITextField を組み込まなければ行けないようです。(1 つのセルに複数の UITextField は NG)
生成するパスワードのフォーマット
この機能で生成されるパスワードは次のようなフォーマットになっているようです。
- 20 文字以上
- 大文字・小文字・数字・ハイフンを含む
- エントロピー 71 bit 以上
- エントロピー とはパスワードの複雑さの指標
- ほとんどのサービスとの互換性があるように設計されている
この発表で出されたパスワードの例は funrus-Hommez-kajzp7
という文字列でした。
また、パスワードのルールはカスタマイズすることが可能です。
1 2 3 4 | let newPasswordTextField = UITextField() ... let rulesDescriptor = "allowed: upper, lower, digit; required: [$];" newPasswordTextField.passwordRules = UITextInputPasswordRules(descriptor: rulesDescriptor) |
このように独自のルールを作成し、UITextField に設定することができます。
Apple の Developer サイトではパスワードのルール文字列を作成できるページも公開されています。
カスタムパスワードを作成する場合は使用してみましょう。
Password Rules Validation Tool | Apple Developer
Automatic Strong Passwords で重要なこと 3 つ。
- アプリとドメインを関連付ける
- フィールドに適切な textContentType を指定する
- サインアップの検知を確実にする
Security Code AutoFill
セキュリティコード(二段階認証)の自動入力もサポートされました。
この機能を利用するためには、新たな textContentType である oneTimeCode
を指定する必要があります。
1 2 | let securityCodeTextField = UITextField() securityCodeTextField.textContentType = .oneTimeCode |
また、Apple が提供するキーボードを利用しなければなりません。
独自のボタンで構成したカスタムキーボードなどは NG です。
これを実装すると、メッセージアプリに届いたセキュリティコードのメールを解析し、QuickType bar にそのコードが表示されます。
Federated authentication
フェデレーテッド認証もサポートされました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import AuthenticationServices 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 iCloud Keychain password management features
こちらは iCloud を利用し、複数のデバイスをまたがってパスワードを管理できるよという内容でした。
Apple TV のパスワード入力処理が iPhone を利用して自動化できるのはとても嬉しいです。
まとめ
プレゼンの Summary は以下です。
- AutoFill はパワフル
- 機能は自動的に動く
- 互換性を確認するためにアプリをテストしよう
iOS 12 になって、ずいぶん機能が強化されましたね。
パスワードの作成・暗記・入力などの操作はユーザーにとって大変苦痛なので、これらを利用してできるだけラクにしたいものです。