Slide 1

Slide 1 text

Firebase Hostingを使ってPasskeyを androidアプリで試してみよう Bunjiro Miyoshi(RyuNen344) GDG DevFest Tokyo 2023

Slide 2

Slide 2 text

About Me ● RyuNen344 ● Kotlin Multiplatform(KMM/KMP)好き ● 特技はKotlin/NativeでObj-Cを書くこと ● Gradleは友達, コワクナイ

Slide 3

Slide 3 text

Agendas 1. What is Passkey 2. Minimum requirements for practicing Passkey 3. Setup Firebase Hosting 4. Practice androidx.CredentialManager

Slide 4

Slide 4 text

What is Passkey ● FIDO2を使って同一エコシステム上であればキーが同期される規格 ● FIDO ○ 専用デバイスの公開鍵と署名をやりとりすることで認証する ● FIDO2 ○ 認証器がより柔軟になった(端末認証, 生体認証が利用可) ○ WebAuthnは柔軟にするために使われている規格(Web API)

Slide 5

Slide 5 text

What is Passkey ● DevFest & Android Dev Summit Japan 2022のえーじさんによるセッショ ンも非常にわかりやすいのでおススメ ● サービスへの組み込み方は👇がおススメ ○ Android Developers ■ https://developer.android.com/design/ui/mobile/guides/p atterns/passkeys ○ DroidKaigi 2023 ■ 様々なユースケースに利用できる "パスキー" の導入事例の紹介と UXの課題解説/ritou

Slide 6

Slide 6 text

Supported Services ● いろいろな会社/サービスが続々サポートし始めている ○ DocuSign ○ Google ○ カヤック ○ メルカリ ○ NTT ドコモ ○ PayPal ○ Shopify ○ LINEヤフー(旧:Yahoo! JAPAN) ○ GitHub ○ Amazon ○ etc…. https://developers.google.com/identity/passkeys#relying-parties

Slide 7

Slide 7 text

Minimum requirements for practicing Passkey ● ローカル認証(生体認証, 知識認証)を有効化している端末 ● android14 device or androidx.CredentialManager ● Digital Asset Links ● WebAuthn:PublicKeyCredentialCreationOptionsJSON/PublicKe yCredentialRequestOptionsJSON

Slide 8

Slide 8 text

About androidx.CredentialManager ● 2023年11月1日に1.2.0(初めてのstable🎉)がリリース ● android14に追加されたCredentialManagerをAndroid4.4から使用で きるようにする ● Passkeyはandroid9以降のみ, それ以下はパスワードとSign in with googleのみ

Slide 9

Slide 9 text

About androidx.CredentialManager ● Intent引き回し芸を内部でやってくれるので使わない手はない ● Smart Lock for Passwords, FIDO2(play-services-fido)を使用して いるアプリは移行してあげるとよい ○ アプリで検出不能なFIDO認証情報(物理的なセキュリティキー)を使 用する必要がある場合はまだfidoで行なう必要ある

Slide 10

Slide 10 text

About Digital Asset Links ● 雑に言うと$domain/.well-known/assetlink.jsonのこと 👉つまりドメインを確保してjsonを配置しなければならない

Slide 11

Slide 11 text

About Digital Asset Links ● 雑に言うと$domain/.well-known/assetlink.jsonのこと 🤔Firebase周りで見かけたことあるな

Slide 12

Slide 12 text

About Digital Asset Links ● Firebase Dynamic Links(以降FDL)をつかうと見かける ○ FDLはサービスシャットダウンがアナウンスされている🥺 ● 実はFDLのmigration guideが公開されている ○ https://firebase.google.com/support/guides/app-links-uni versal-links ○ その中でFirebase Hostingに移行するセクションがある 😎Firebase Hostingつかおう

Slide 13

Slide 13 text

Setup Firebase Hosting 1. Firebase Projectをつくる 2. Firebase CLIをインストールしてセットアップする 3. assetlink.jsonを作る 4. WebAuthnのjsonを作る 5. Firebase Hostingにdeployする

Slide 14

Slide 14 text

Setup Firebase Hosting 1. Firebase Projectをつくる 2. Firebase CLIをインストールしてセットアップする 3. assetlink.jsonを作る 4. WebAuthnのjsonを作る 5. Firebase Hostingにdeployする 公式サイト通りなので割愛 https://firebase.google.com/docs/cli

Slide 15

Slide 15 text

Setup Firebase Hosting 1. Firebase Projectをつくる 2. Firebase CLIをインストールしてセットアップする 3. assetlink.jsonを作る 4. WebAuthnのjsonを作る 5. Firebase Hostingにdeployする

Slide 16

Slide 16 text

Create AssetLink.json

Slide 17

Slide 17 text

Create AssetLink.json targetがドメインをどう扱って良いかを宣言する Passkeyを実装するためには👇両方必要 1. handle_all_urls(URLを処理する) 2. get_login_creds(認証情報を取り扱う)

Slide 18

Slide 18 text

Create AssetLink.json package_nameにはapplicationIdを指定する sha256_cert_fingerprintsはkeytoolsかapksignerを使って確認すると早い

Slide 19

Slide 19 text

Setup Firebase Hosting 1. Firebase Projectをつくる 2. Firebase CLIをインストールしてセットアップする 3. assetlink.jsonを作る 4. WebAuthnのjsonを作る 5. Firebase Hostingにdeployする

Slide 20

Slide 20 text

Create json for WebAuthn ● Passkeyを試すための最小限必要なjsonは👇の2つ a. PublicKeyCredentialCreationOptionsJSON ■ キー生成をするためのjson ■ https://w3c.github.io/webauthn/#dictdef-publickeycrede ntialcreationoptionsjson b. PublicKeyCredentialRequestOptionsJSON ■ 生成済みのキーを取得するためのjson ■ https://w3c.github.io/webauthn/#dictdef-publickeycrede ntialrequestoptionsjson

Slide 21

Slide 21 text

PublicKeyCredentialCreationOptions

Slide 22

Slide 22 text

PublicKeyCredentialCreationOptions RP(Relying Party)にはFirebase Hostingで作ったドメインを指定する

Slide 23

Slide 23 text

PublicKeyCredentialCreationOptions user, challengeは本来動的に生成するもの(*今回は横着して固定値)

Slide 24

Slide 24 text

PublicKeyCredentialCreationOptions authenticatorSelection.authenticatorAttachmentの値で挙動が変わる platform: 現在のデバイスを登録 cross-platform: 多要素認証を登録する(のでPasskey文脈では使われない) null: ユーザーが希望するデバイスを登録

Slide 25

Slide 25 text

PublicKeyCredentialRequestOptions

Slide 26

Slide 26 text

PublicKeyCredentialRequestOptions RP(Relying Party)にはFirebase Hostingで作ったドメインを指定する challengeは本来動的に生成するもの(*今回は横着して固定値)

Slide 27

Slide 27 text

Setup Firebase Hosting 1. Firebase Projectをつくる 2. Firebase CLIをインストールしてセットアップする 3. assetlink.jsonを作る 4. WebAuthnのjsonを作る 5. Firebase Hostingにdeployする

Slide 28

Slide 28 text

Setup Firebase Hosting 1. Firebase Projectをつくる 2. Firebase CLIをインストールしてセットアップする 3. assetlink.jsonを作る 4. WebAuthnのjsonを作る 5. Firebase Hostingにdeployする 😎firebase deployを実行するだけ

Slide 29

Slide 29 text

Practice androidx.CredentialManager 1. update gradle dependency 2. implement with CredentialManager

Slide 30

Slide 30 text

Practice androidx.CredentialManager 1. update gradle dependency 2. implement with CredentialManager

Slide 31

Slide 31 text

Update gradle dependency play-servicesの認証情報を使う場合は credentials-play-services-authも追加でimplementationする

Slide 32

Slide 32 text

Practicing androidx.CredentialManager 1. update gradle dependency 2. implement with CredentialManager

Slide 33

Slide 33 text

Implement with CredentialManager 😎あとは基本公式どおり・・・・だけど

Slide 34

Slide 34 text

Implement with CredentialManager

Slide 35

Slide 35 text

Implement with CredentialManager WebAuthn用のjsonをHttpClient等で取得して渡す

Slide 36

Slide 36 text

😎Ready for Passkey 😎動的なバックエンド実装を用意するならCloud Functionsを使うとよい

Slide 37

Slide 37 text

References ● https://developer.android.com/training/sign-in/passkeys ● https://developers.google.com/identity/passkeys ● https://developers.google.com/digital-asset-links ● https://www.youtube.com/watch?v=TWlZzPrlFYA ● https://github.com/android/identity-samples ● https://github.com/android/codelab-fido2 ● https://github.com/google/webauthndemo

Slide 38

Slide 38 text

EOF