wootan's diary

iOSアプリ開発を中心としたエンジニアブログ

iOS12 の Automatic Strong Passwords に対応してみた

Reluxのパスワード変更画面を Automatic Strong Passwordsに対応しました。
1年前に Password Auto Fill に対応していたので工数はあまりかかりませんでした。

【関連記事】Password Auto Fill に対応した記事はこちらです。
wootan1102.hatenablog.com

Automatic Strong Passwordsとは?

Automatic Strong Passwords は iOS12のあたらしい機能です。
iOSが強力なパスワードが自動生成し、そのパスワードが画面上でサジェストされます。
パスワードはKeyChainに保存され、入力時に生体認証(顔認証、指紋認証)で自動入力することが可能です。

f:id:wootan1102:20181115104521p:plain:w200

パスワードが自動生成されるとこのように表示され、
自動生成されたものを使用するか、独自のパスワードを使用するか選択することができます。

対応方法

前提条件:Password Auto Fillに対応していること

パスワード自動生成にはキーとなるユーザ名を画面に表示する必要があります。
そして Password Auto Fill と同じように textContentTypeを指定するだけです。

ユーザ名の textContentType に username
パスワードの textContentType に newPassword
を指定することがで対応することができます。
また、パスワードの入力欄が2つある場合でも下記のようにすることで対応可能です。

let userTextField = UITextField()
userTextField.textContentType = .username
 
let newPasswordTextField = UITextField()
newPasswordTextField.textContentType = .newPassword
 
let confirmNewPasswordTextField = UITextField()
confirmNewPasswordTextField.textContentType = .newPassword

※ユーザ名は hidden にしてしまうとパスワード自動生成されなくなってしまいます。

パスワードルールについて

パスワードルールはサービスによって異なると思います。
自動生成されたものがサービスに対応していないと、KeyChainの中身だけ変更されログインができなくなってしまいます。
その点もきちんと考慮されていて、コード上でパスワードルールを設定することができます。

パスワードルールはこちらのツールで生成することができます。
Password Rules Validation Tool
Password Rules Validation Tool - Apple Developer

例えば
小文字必須
大文字必須
10文字以上 20文字以内
という設定だった場合はこのようなルールになります。

UITextInputPasswordRules
required: lower; required: upper; minlength: 10; maxlength: 20;

<input type="password">
passwordrules="required: lower; required: upper; minlength: 10; maxlength: 20;"

iOSアプリだけでなくHTML用の設定も吐き出されるようになっているので
Safari でもアプリと同じような体験を提供することができます。


Automatci Strong Passwords はユーザにパスワード入力させる手間を省くだけでなく、
使いまわされた脆弱なパスワードを回避する方法としても有効です。
実装も比較的簡単にできるので徐々に対応したアプリが増えてきそうです。