ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
パスキーによるアップグレードと認証情報マネージャによるサインインの効率化
既存のパスワードベースのアカウントを、パスキーを使用できるように自動でアップグレードする方法を学びましょう。アカウントセキュリティとサインインの容易さを向上させるべき理由とそれを実現する方法、認証情報マネージャアプリ向けの新機能に関する情報、新しいパスワードアプリでご自身のアプリ情報を差別化する方法を紹介します。
関連する章
- 0:00 - Introduction
- 0:38 - Automatic passkey upgrades
- 2:37 - The passkey journey
- 4:18 - Automatic passkey upgrade sequence
- 7:46 - Shipping and deploying passkey support
- 9:17 - Improvements for credential managers
- 10:14 - The new Passwords app!
- 11:30 - Updating appearance in the Passwords app
- 12:31 - One-tap verification code setup
リソース
- About the security of passkeys
- ASCredentialProviderExtensionCapabilities
- Authentication Services
- Connecting to a service with passkeys
- Forum: Privacy & Security
- Passkeys overview
- Public-Private Key Authentication
- Supporting passkeys
関連ビデオ
WWDC23
WWDC22
WWDC21
-
ダウンロード
こんにちは Garrettです 今日は皆さんのアプリやWebサイトに パスキーへの自動アップグレードを 実装する方法や 優れたサインイン体験を実現するための 新しい開発の数々をご紹介します このセッションでは 既存のアカウントをパスキーに 自動アップグレードする方法
認証情報マネージャで使える新機能の数々 新しいパスワードアプリで 皆さんのアプリを差別化する方法を説明します
最初にご紹介するのは パスキーへの自動アップグレードです
通常 サインインは 次のような流れで行われます
まずユーザー名を入力し
パスワードを入力します
SMSにコードが届いたら
これを入力します
これで やっとサインインできました
このように Webサイトやアプリに サインインする際は 複数の手順が必要です この方法だと セキュリティは向上しますが 時間がかかって面倒です
アプリによっては この段階で インタースティシャルアップセルが表示され パスキーなど別の方法で より早く サインインする方法が案内されますが このアプリは 自動的にパスキーに アップグレードされるようになっているので ご覧のように パスキーが作成されたという 通知が表示されています アップセル画面の表示も中断もなく より簡単でセキュアなサインイン体験が スムーズに実現します これはもちろん 皆さんのWebサイトでも可能です
この体験は さらに強力で安全な サインイン方法に できるだけ簡単かつスムーズに 移行できるようにするためのものです アプリをもう一度開くと 1回タップするだけで 超高速かつ簡単にサインインできます
この一連の流れを比べてみましょう 最初の手順はまったく同じです
1つのボタンでアカウントを選択します
従来のサインインの場合は このあとも手順がいくつかありますが パスキーの場合は手順はこれだけで サインイン完了です しかもパスキーの方がずっと安全です
フィッシング攻撃などの 認証情報の詐取攻撃は 今日 インターネットでのアカウント侵害の 最も一般的な手口となっています
最も効果的なフィッシング対策は フィッシングされる要素が一切ない アカウントを設定することです
新しいアカウントを 保護するための最善の方法は 最初からパスキーを設定することです パスキーなら 忘れることもなく リセットの必要もめったにない上に 1回タップまたはクリックするだけで サインインできます
パスキーにするだけで フィッシングに対する アカウントの脆弱性を克服できます
しかし 今日のほぼすべてのアカウントでは フィッシングされる恐れのある パスワードやSMS メール プッシュ通知 有効期限のあるコードしか使われていません
これらを組み合わせれば 少しは効果的ですが どの要素も基本的には フィッシングに対して脆弱なものばかりです
今 業界では フィッシング攻撃に 脆弱なサインイン方法から フィッシング不可能なパスキーなどの 認証方法への移行が始まったばかりです
既存のアカウントで このプロセスを開始するには まず フィッシング不可能なサインイン方法を 代替的な方法として追加します
このように 段階的に パスキーを導入することで ユーザーが各自のペースで 移行できるようになります
最終的な目標は フィッシングに脆弱な 認証要素を完全になくすことですが このセッションでは ユーザーができるだけ簡単な方法で スムーズにパスキーを使い始められるよう この最初の第1歩を踏み出すことに 重点を置きます
これは パスキーへの自動アップグレード のためのシーケンス図です システムはアプリからリクエストを受けると この時点でパスキーを作成するのが 適切かどうかを判断し 適切と判断した場合は 新しいパスキーを返します
この判断を行うため システムはリクエストを受け取ると 以下を実行します まずシステムは 一連の内部チェックを行って この時点でパスキーを作成するのが 適切かどうか判断します
例えば デバイスに 認証情報マネージャが設定されており パスキーへの自動アップグレードに 対応しているかどうか
パスキーの使用に必要なパスコードなどが デバイス上で設定されているかどうか Webでのリクエストの場合は これがプライベートブラウズ以外の タブであることを確認します
システムは リクエストを受理してよいと判断すると 利用可能な認証情報マネージャに リクエストを渡します 認証情報マネージャにも 独自の受理条件があり 最も重要な条件は 以前にも パスキーを使用して 同じアカウントのユーザー名とパスワードを 入力したことがあったかどうか つまり このアカウントのユーザー名が パスキーと同じかどうかということです
ユーザー名が同じで 認証情報マネージャの その他の条件も満たしている場合は 新しいパスキーが返され アプリに渡されます
このプロセスで条件が満たされない場合は エラーが返されますが これは必ずしも 何か問題があるという意味ではなく 今回はパスキーが生成されなかった というだけのことです
パスキーへの自動アップグレードは 段階的に実装すると考えてください パスキーは リクエストすれば 必ず登録できるとは限りませんが 登録できた場合は アップセル画面が不要になり アプリの操作も中断されず スムーズなユーザー体験が実現します
これは パスワードによるサインインが 行われた時に パスキーの作成を促す際のフローです
パスワードを使ってサインインすると アカウントのパスキーの有無がチェックされ ない場合は作成を促します
現在 多くのアプリでは サインイン後すぐに このようなダイアログが表示され アップグレードが促されます
パスキーへの自動アップグレードでは このような手順が不要になります この場合は .conditionalという登録用の新しい requestStyleを渡すことができます
システムとパスキーマネージャの 前提条件を満たしている場合は パスキーが返され パスキーが作成されたという通知が デバイスに表示されます この間 アプリで実行中の操作は 中断されません
前提条件が満たされないと エラーになり UIは表示されません
この段階で 既存の アップセルダイアログを表示するか 別の機会にもう一度試すかを選択できます
Webの場合も同様です 標準のパスキー登録はこのようになりますが
ここでは mediationの conditionalパラメータによって モーダルでパスキーを作成するリクエストが 自動アップグレードスタイルの リクエストに変更されます
Webの場合は リクエストスタイルを変更する前に getClientCapabilitiesを使って ブラウザが対応しているかどうか確認します
業界内で パスワードから パスキーへの移行が進んでいる中 パスキーへの自動アップグレードによって この流れに拍車がかかるでしょう
アプリやWebサイトのパスキーへのサポートを 提供するプロセスは 他の機能の開発と実装と同じで 「学習」「開発」「テスト」「出荷」の フェーズを辿りますが パスキーの場合は ほかとは少し異なり 最終目標が2つあります 1つ目はサインインを簡単にすること もう1つはアカウントのセキュリティ強化です
パスキーのサポートを提供することで サインインは大幅に簡単になりますが パスワードとの併用を続けた場合は フィッシング攻撃や パスワードの使い回しを狙った攻撃から 完全に逃れることはできません
つまり フィッシング可能な 全ての要素を取り除くための サインインのオプションを 検討する時期にあるということです
皆さんのサービスを利用しているユーザーが パスワードを使用していないなら ぜひ パスワードの排除を検討してください
同様に ユーザーが多要素認証を使って サインインしている場合は 現在使用されている追加要素のほとんどが 未だフィッシング攻撃に脆弱であり それがパスキーへの移行が進んでいる 根本的な理由であることを忘れないでください
パスキーを採用することで サービスへのサインインを 大幅に高速化 簡素化できます また 今日の一般的な多要素認証よりも さらに強力なセキュリティ対策を 実現できます
今すぐパスワードを排除するのは 難しいかもしれませんが これが パスキー実装の最終目標であることを 忘れないでください
次に 認証情報マネージャで利用可能な 新機能を紹介します
認証マネージャも パスキーへの 自動アップグレードに対応しています
それに加えて 有効期限のあるコードを 入力できるようになり
ユーザー名 パスワード ワンタイムコードも テキストフィールドに入力可能になりました
これらはすべて 従来の 認証情報マネージャAPIへの追加機能です これらの機能に対応するため Info.plist用の新しいキーと 対応するAPIが用意されています 詳しくは 認証サービスに関する ドキュメントを参照してください
CredentialProviderExtensionの メカニズムも パスワード パスキー 確認コードに対応するようになり AutoFillを使うアプリを3つまで 選択できるようになっています
以上が 認証情報マネージャの改良点です
最後に パスワードアプリについて説明します これはmacOS Sequoia iOS 18 visionOS 2の新機能です
このアプリでは Webサイトの 名前やアイコンに注目が集まります ぜひ個性を発揮してください Webサイトやアプリの表示を 変更する場合は そのための標準的な方法が 用意されていますので 後ほど説明します
トップレベルのパスキーのセクションでは フィッシング耐性の高い サインインを採用している アプリやWebサイトがハイライト表示されます 確認コードのセクションもあります 簡単にコードを見つけてコピーできるので まるで専用の認証アプリみたいですね
セクションには 脆弱なパスワードや使い回しパスワード 漏洩したデータに含まれている 保存済み パスワードのリストが表示されます Well-Known URL for Changing Passwords仕様が採用されている場合は ボタンから パスワード変更用のWebページを開けます
macOSでは メニューバー項目を有効にしておけば パスワードと確認コードに 素早く簡単にアクセスできます 別の認証情報マネージャから 簡単にパスワードを読み込んだり 読み出すこともできます
次に パスワードアプリでアカウントが どう表示されるか見てみましょう
このアカウントには パスキーとパスワードが設定されています
特定のアプリやWebサイトで 同じユーザー名のパスキーとパスワードが 保存されている場合 パスワードアプリは この2つを 1つのエントリとして統合します
WebサイトでOpenGraphメタデータ 標準が実装されている場合は アカウントが保存されているサイト名が パスワードアプリに表示されます
実装されていない場合は パスワードアプリが Webサイト名の取得を試みるか ドメイン名にフォールバックします
OpenGraphWeb標準を実装すると Webページのヘッダタグに 特定のメタタグを追加して Webサイトのメタデータを宣言できます
Webサイトが適切に表示されるよう すべてのページ サブドメイン ユーザーエージェントに メタデータが 設定されていることを確認してください
さらに Webサイトのアイコンが アカウントの横に明確に示されるよう 高解像度のアイコンを用意しましょう
最後に 有効期限のある確認コードを使う アプリやWebサイトの場合は 標準のQRコードに加えて otpauth:リンクを提供することで ワンタップでコードを 設定できるようになります
このリンクをタップすると システムの デフォルトの確認コードアプリが起動し 別のデバイスでも 今使っているデバイスでも 簡単にコードを設定できます
確認コードに使用できる 認証アプリのリストを表示する場合は 「Appleパスワード」も リストに追加してください
確認コードの詳細については 「Secure login with iCloud Keychain verification codes」をご覧ください
今後 以下をぜひ実行してみてください パスキーをまだ導入していない方は 今が絶好のタイミングです パスキーはパスワードよりも ずっと速く 簡単でセキュリティも向上します 自動アップグレードによって かつてないほど簡単に この移行が可能になっています
Webサイトのメタデータを更新し パスワードアプリで Webサイトを差別化しましょう
最後に 確認コードの設定を効率化して どのデバイスの認証情報マネージャでも スムーズに設定できるようにしましょう
ご視聴ありがとうございました フィッシング攻撃をなくす取り組みに ご協力いただきありがとうございます
-
-
0:01 - Offering a passkey upsell
// Offering a passkey upsell func signIn() async throws { let userInfo = try await signInWithPassword() guard !userInfo.hasPasskey else { return } let provider = ASAuthorizationPlatformPublicKeyCredentialProvider( relyingPartyIdentifier: "example.com") guard try offerPasskeyUpsell() else { return } let request = provider.createCredentialRegistrationRequest( challenge: try await fetchChallenge(), name: userInfo.user, userID: userInfo.accountID) do { let passkey = try await authorizationController.performRequest(request) // Save new passkey to the backend } catch { … } }
-
0:02 - Automatic passkey upgrade
// Automatic passkey upgrade func signIn() async throws { let userInfo = try await signInWithPassword() guard !userInfo.hasPasskey else { return } let provider = ASAuthorizationPlatformPublicKeyCredentialProvider( relyingPartyIdentifier: "example.com") let request = provider.createCredentialRegistrationRequest( challenge: try await fetchChallenge(), name: userInfo.user, userID: userInfo.accountID, requestStyle: .conditional) do { let passkey = try await authorizationController.performRequest(request) // Save new passkey to the backend } catch { … } }
-
0:03 - Modal passkey creation (web)
// Modal passkey creation const options = { "publicKey": { "rp": { … }, "user": { "name": userInfo.user, … }, "challenge": …, "pubKeyCredParams": [ … ] }, }; await navigator.credentials.create(options);
-
0:04 - Automatic passkey creation (web)
// Automatic passkey creation let capabilities = await PublicKeyCredential.getClientCapabilities(); if (!capabilities.conditionalCreate) { return; } const options = { "publicKey": { "rp": { … }, "user": { "name": userInfo.user, … }, "challenge": …, "pubKeyCredParams": [ … ] }, "mediation": "conditional" }; await navigator.credentials.create(options);
-
0:05 - New Credential provider Info.plist keys
<dict> <key>NSExtensionAttributes</key> <dict> <key>ASCredentialProviderExtensionCapabilities</key> <dict> <key>ProvidesPasswords</key> <true/> <key>ProvidesPasskeys</key> <true/> <key>SupportsConditionalPasskeyRegistration</key> <true/> <key>ProvidesOneTimeCodes</key> <true/> <key>ProvidesTextToInsert</key> <true/> </dict> </dict> </dict>
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。