嫌われないパスキー実装を探求する - 日経IDのパスキー実装を見てみた

ritou です。

前回、こんな記事を書きました。まず読んでみてください。

ritou.hatenablog.com

パスキー対応をするにあたり、パスキーを使いたい人が普通に使える のは当たり前ですし、どのサービスもそこはそれなりに実装するものです。 ただ、実際にユーザーに使ってもらうとなった時、パスキーが使えない状況だとかパスキーを使いたくないユーザーが不満を覚えてしまうことが先行サービスへの反応からわかってきています。そこで、一歩踏み込んた観点を整理したというのが前回の記事の内容です。

今回からは、この観点でいろんなサービスのパスキー対応を見ていきたいと思います。 どこから見ていくのかというところですが、最近対応がアナウンスされていた日経IDのパスキー対応を見てみます。

日経IDのパスキー対応内容

日経IDのパスキー対応ってどんな感じなの?というところで、昨年末のアドカレで紹介されていた内容から変わってなさそうです。

hack.nikkei.com

開発者目線でパスキーのことを考えたことがある場合は上記記事から対応内容が見て取れると思います。

嫌われる実装になっていないかの考察

3つの機能単位で見ていきます。

  1. 登録促進
  2. 管理
  3. 認証

1. 登録促進

アカウント設定のトップ->セキュリティと辿ると、パスキー未登録の場合は説明が上の方にあります。

ログイン直後に登録を促すパスキープロモーションなどは行なっていないようです。これであれば「パスキー登録しろってうるさい」みたいな反応は出ないでしょう。

その分、実際に登録してくれるユーザーの数はなかなか増えない(意識高い系のみ登録してくれる)という状況は考えられますが、そこは今後は頻度などを考えて実装してもらえたら良さそうですね。

2. 管理

管理については基本を押さえた実装になっているように見受けられます。

セッション管理との絡みとかいくらでも細けぇ改善などもできる余地はありますが、プラクティスとして出てきたら対応してもらえば良いでしょう。

3. 認証

ここが本番です。

  1. パスキー未登録ユーザー×パスキー認証
  2. パスキー未登録ユーザー×パスキー以外の認証
  3. パスキー登録済みユーザー×パスキー認証
  4. パスキー登録済みユーザー×パスキー以外の認証

それぞれ見ていきましょう。

1. パスキー未登録ユーザー×パスキー認証

これは パスキー未登録ユーザーがパスキー認証のフローに迷い込む余地 の話です。

"パスキーでログイン" リンクが見えます。Autofill非対応環境への配慮ですね。 ユーザーの責任とも言ってしまえばそれまでですが、これを誤って押してしまいなんなんだ?となるケースは一定ある ことを意識しておきましょう。 ダイアログにモバイル端末とかセキュリティキーとか出てきちゃうのに我々は慣れていますが、そうではないユーザーの方が大多数だということです。 開発者としてはなるべくパスキー認証させたいんや!というところですが、個人的には Autofill非対応環境はパスキー非対応環境 ぐらいで割り切ってもいいかなと思います。

2. パスキー未登録ユーザー×パスキー以外の認証

パスワード未登録ユーザーがメールアドレスを入力すると、ユーザーの識別とパスキーの登録状態がチェックされた結果、パスワード入力フォームが表示されます。パスワードマネージャーにパスワードが保存されていてそれを選択する場合も、パスワード入力フォームに自動入力されます。これは特に問題なさそうです。

3. パスキー登録済みユーザー×パスキー認証

Autofill対応環境であればしれっとログインできます。

Autofill非対応環境でも、リンクからパスキー認証のダイアログに続けられます。 手元の端末にパスキーがない場合でも、Hybrid Transportによりゴリ押しは可能です。

Autofillでメールアドレスを入力して続けた場合も、ユーザーの識別とパスキーの登録状態がチェックされた結果パスキー認証を促されます。

このボタンからはallowCredentialsに値が指定されます。パスキー使わせたいという気持ちが伝わってきます。

このような実装が問題になり得るのは 手元にパスキーがなく、Hybrid Transportも使えない ようなケースですね。 嫌われるランキング第一位のエラーである "パスキーがありません" が発動する可能性があります。 これは、Identifier-Firstと呼ばれる実装パターンの特徴と上記のワンボタンログインの特徴の合わせ技、というか落とし穴というかそんなところです。

もちろんパスワード認証へのリンクもあるのでどん詰まりにはなりませんが、一般ユーザーにとっては "エラーを見せたら負け" なところもあるので反応などを見て改善などを考えてみてもよいのではないでしょうか。 この辺りで参考になりそうなのはやはりマネーフォワード IDのログインフローでしょう。

  1. Autofill付きのメアド入力フォーム
  2. Autofill付きのパスワード入力フォーム(allowCredentialsあり)

と多段でAutofillを仕掛けつつ、パスワード認証へのフォールバックも自然にできるようにするのが現状のベストプラクティスでしょう。

4. パスキー登録済みユーザー×パスキー以外の認証

ここではさらに2パターンを確認します。

  • パスキー対応環境だがパスワード認証を使いたい
  • パスキー非対応環境

パスキー対応環境でユーザーがパスワード認証を選択するケースから見てみます。 手元にパスキーがない状態はどうしても考えられるわけで、その時にメールアドレス入力フォームのAutofillではパスワードを選択できる場合があります。 パスキー登録済みユーザーが最初のAutofillでパスワードの項目を選択しても、日経IDではパスキー認証を求められます。

これは結局ユーザー識別とパスキーの登録状態を確認してその後の処理を判断するためですが、気になるのは "ユーザーはパスワード認証を選んだ" にも関わらず、"パスキー認証が要求される" ということです。そこからパスワード認証に進むにはワンクリックが必要なのです。 パスキー認証を優先したいという思想から来ているのだと思いますが、これがどういう反応をもたらすのかは少し気になりますね。

改善策としてはこちらもマネーフォワード IDがやっているhiddenなパスワードフォームといったものがあります(どんだけベストプラクティスの塊なんだ)。参考にしても良いかもしれませんね。

ritou.hatenablog.com

最後に、非対応環境も見てみましょう。

日経IDはパスキー非対応環境でもユーザー識別とパスキーの登録有無を判断してパスキー認証を要求するように見えます。そしてボタンを押しても何も起こらない。繰り返しになりますが、パスワード認証へのリンクはあってもユーザーに混乱を与えてしまうことは避けたいですね。 改善案としてはメールアドレス入力フォームの表示の時点などで環境をチェックし、それも踏まえてどの認証を要求するかを決める方が良いかもしれません。Yahoo! JAPANなどはそうしてますね。

まとめ

嫌われないための観点から日経IDの挙動を確認しました。 色々細けぇ話を書きましたが、パスキーを使いたいユーザーにとっては問題なく使えるでしょう。 パスワードを使いたいケース、パスキーが使えないケースで一手間かかってしまう点にどのような反応が出てくるかに注目してもらえたら良さそうです。

別のサービスについても見ていきたいと思います。自分のところも。

告知

3月末はパスキー祭りと言っても良いでしょう。

まずは前回に引き続き iddance です。

idance.connpass.com

次の日の昼には私がお話しします。

findy.connpass.com

記事を書いてる時点では265人ですって。Findyさんの集客力すごいですね。

ではまた。

"ユーザーに嫌われないパスキー実装" の観点 & イベント告知

ritouです。

先にイベント告知:「iddance Lesson.5 パスキーのすべて」

3/24(月)の夜に「パスキーのすべて」著者の3人をお呼びして、本に書いてあることやないことまでお聞きするイベントを予定しています。 他の勉強会ではなかなか聞けない深いお話ができたらと思っていますので、是非本を購入して内容を読み込んだ上で臨んでいただければと思います。

idance.connpass.com

日頃からXで色々言ってて仲が良いんだか悪いんだかわからない、私とくらさんの会話にでも注目しておいてください。

嫌われないための観点

昨年末ぐらいから特に、あるサービスがパスキー対応しました!となった時に、ユーザーに嫌われない実装になっていないかどうかを考える用になりました。

今回はこういう観点も持っておく必要があるのではないか、という整理をします。

対象は "強制ではなく任意でパスキー認証を提供" というところです。

パスキー関連の機能でまずは次の3つに注目します。

  1. 登録促進
  2. 管理
  3. 認証

それぞれ見ていきましょう。

1. 登録促進

パスキー対応を行ったサービスは、当然ユーザーに積極的に利用してもらおうと登録促進の施策を考えます。 代表的なものは次の2つでしょう。

  • アカウント設定画面に導線を置きつつ、ユーザーの意思で設定させる : パスキーの説明など、既に出されているガイドラインなどに沿っているか
  • パスキープロモーションと呼ばれる、"パスキー登録しないか?" と言う画面を出す : 画面内の説明、画面を出すタイミング、環境は適切か

基本的にユーザーはサービスを利用するために新規登録や認証を強いられます。特に後者のパスキープロモーションについて、各サービスで今の所は受け入れられているように見えますが、あまりしつこく出すとうざがられてしまうことも考えられます。

登録促進については特に "基本を抑えつつ邪魔しない" 誘導が重要でしょう。 今年さらに対応が進むと思われる(期待している)自動登録のあたりも今後関わってくるので、注目しておきましょう。

管理

アカウント設定からの管理のあたりの話です。様々なサービスで汎用的に実装できる部分だと言えるでしょう。 "パスキーカード" といった表現や提示する情報など、ガイドラインを参考にして実装していくことが重要です。

今後はパスワードマネージャーとサービスが保持するパスキー情報の整合性を保つ仕組みであるWebAuthn Signal APIの活用もこの辺りに関わってくるので注目ですね。

認証

ここからはサービス毎に実装に多様性が現れる部分なので、少し細分化して考える必要があります。 まずは認証を行うユーザーの状態を2つに分けます。

  • パスキー未登録
  • パスキー登録済み

それらが試みる認証フローも2つを想定します。

  • パスキー認証
  • パスワード認証(+α)のように、パスキー以外の認証

ここまでの組み合わせは4種類になります。

  1. パスキー未登録ユーザー×パスキー認証
  2. パスキー未登録ユーザー×パスキー以外の認証
  3. パスキー登録済みユーザー×パスキー認証
  4. パスキー登録済みユーザー×パスキー以外の認証

それぞれを見ていきましょう。

1. パスキー未登録ユーザー×パスキー認証

一見、このパターン存在しなくない?と思いがちです。が、認証フローに入ることはありますよね。

  • "ワンボタンログイン"
  • ユーザーを識別していない状態でのAutofillの "別のパスキーを利用する" みたいなところから

可能性としては圧倒的に前者の方が多いでしょう。そして認証フローに入ったら当然ながら、絶対に成功しません。 意図せずパスキー認証フローに入ってしまい、謎のダイアログ、セキュリティキーやらQRコードとかのワードが出てきたら混乱してしまうでしょう。

例えば、開発者としては "Autofillに非対応、もしくはなんか挙動が怪しい環境" において "パスキー登録済みユーザー" のために "パスキーでログインボタン"を置きたくなります。しかし、未登録ユーザーもクリックしてしまうことはあり得るし、混乱を招いてしまう可能性があることは意識しておきましょう。

2. パスキー未登録ユーザー×パスキー以外の認証

開発者としてはパスキー対応にあたってパスキーを登録したユーザーの利便性をあげたい!と思うでしょう。 しかし、パスキー対応をした時点でユーザーは全員パスキー未登録です。ログアウト状態の未登録ユーザーは必ずパスキー以外の認証を利用する必要があるわけです。

パスキー未登録ユーザーの認証フローがパスキー対応前よりも複雑になったり面倒になったりすると、パスキーに触れる前に "なんか急にめんどくさい" と言う印象を持たれる可能性があるので、意識しておきましょう。

3. パスキー登録済みユーザー×パスキー認証

これは開発者として最優先で考えられる部分ですね。新しい話はなさそうな気はするものの、パスキー認証を優先するかどうかの話は少しありそうです。 よくあるのがメールアドレスなどから識別を行った上で、パスキー登録済みユーザーに対してパスキー認証を要求するという "Identifier-Firstパターン" です。

"パスキー認証が利用可能な環境" において、パスキー認証を要求されたらはいよろこんでとばかりに認証して終わりです。

一方、何らかの事情でパスキー認証が利用不可能な環境があります。具体的には、次の2つです。

  • パスキー非対応環境
  • ユーザーが登録済みのパスキーにどうしても辿り着けない環境

前者の場合にパスキー認証へと誘導しても成功しません。環境判定はしっかりやりましょう。 そして、環境判定をしっかりしていても、後者のような状況はあり得ます。スマートフォンにのみパスキーが管理されている場合はまだいいとして、PCでしか管理されていない状態からの新規ログイン時には "パスキー認証できねぇ" となってしまいます。

この辺りを考慮した上で、Identifier-Firstパターンにするとしてもメールアドレス入力フォームにAutofillを導入して "パスキー認証が利用可能なユーザー" はそこから認証してもらう、それ以外はパスキー認証を必ずしも望んでいないケースがあるので、パスキー認証をどこまで優先させるかをよく考えましょう。

4. パスキー登録済みユーザー×パスキー以外の認証

上の話と繋がるのですが、パスキー認証が利用不可能な場合は別の認証方式を利用せざるを得ません。

特にIdentifier-Firstパターンのメールアドレス入力フォームにて、パスキーのAutofillを導入することで、これまで単なる "メールアドレスのサジェスト" だったものが "利用したいアカウントと認証方式"の選択に意味合いが変わる場合があります。

これまでパスワード認証を利用していた場合、候補として "アカウントとパスワード認証" が出てきますし、これを選んだユーザーはパスキーではなくパスワード認証を選択したと言う可能性が高いわけです。このようなユーザーに対して、パスキー認証を優先して要求してしまうと、"ここのログインではパスキーが使えないんや。パスワードを使わせてくれ" といった反応をされそうです。こういう場合、マネーフォワード IDのようにパスワードを受け取った場合でも柔軟に対応できるようにしておくのが現状のベストプラクティスな気がしています。

ユーザーの事情でパスキー認証が使えないケースにおいて、開発者としては "パスキー認証を優先しつつフォールバックを用意している状況ならば問題ない" と考えがちです。そして、"こういう仕様です" として内部でQAなどを進めると、動作確認をする方も前提としておいてしまうので "エラーが出ると混乱するのではないか?" といった意見が出にくい状態にもなってしまうでしょう。前述のように成功しないパスキー認証フローに入ってしまうことや、"利用できるパスキーが存在しません" と言う悪魔のエラーを表示してしまうと高い確率で嫌われてしまうことが先行実装したサービスへの反応からわかっているので、ユーザーの意図とは異なる認証方式を要求することになっていないかをよく考える必要があるでしょう。

まとめ

今回は、こう言う状況でユーザーは混乱してしまうのではないか、と言うのを想像しながらパスキー関連機能で気をつける点を整理しました。 これだけが全てという話ではなく、こういう観点もあるのではないか?というところで参考にして貰えばと思います。

今回の観点から実際のサービスのパスキー対応を見ていく、というのも次回の記事でやってみましょう。

繰り返しになりますが、"iddance Lesson.5 パスキーのすべて" への参加登録をお願いします。

idance.connpass.com

ではまた。

ログイン機能でマジックリンク方式の採用を考える際のポイント

ritou です。

いわゆるマジックリンク方式ってのは「メールなどで推測困難なURLを送ってクリックさせたらあれこれする」ものです。 最近のパスワードレスを目指す風潮の中で、様々な人がこの方式をログインに利用することを検討したり話題に出したりしています。

個人的にはこの方式はなかなかクセが強く、 ログイン方法としての採用できるサービスを選ぶもの だと思っています。 今回は、このような検討の際にどの辺を意識したらいいかについて整理しましょう。

最近の関連記事

最近はこんな記事が出ていました。

recyclebin.zip

マジックリンク方式を唯一のログイン方法に使うべきではない4つの理由 ですね。

  • 複数デバイスでの利用
  • リンク送信時の遅延
  • モバイルアプリのあたりの使い勝手
  • 仕事用端末で個人用のメールにアクセスする必要が出てきたりしそう

みたいな理由でパスキー認証を使えやという主張です。最後のは必ずしも混ぜるな危険にならない使い方はある気がしますが、概ね同意です。

その続きのように、自分のマジックリンク方式に対してのお気持ち、そしてマジックリンク方式とパスキー認証の組み合わせみたいなとこに触れている記事が出ていました。

rmondello.com

この記事で +1 したい部分は 「Passkey Autofillを使ってメアド入力フォームでパスキー認証を利用可能にする、使えない場合でも既存の認証方式にフォールバックできる」 ってところで、ログイン方法としてのマジックリンク方式の考察はそんなにでもないです。

そして、この記事で参照されている404の記事ですね。

www.404media.co

マジックリンクは完全ではないことは知ってる、けどパスワードは絶対使わないマン です。

全体を見ると、 パスワード認証やめてマジックリンク方式、そこからパスキー認証を導入する流れについての考察 というところでしょう。

自分の考えともそんなに変わりませんが、ここで今一度マジックリンク方式の特徴、ログイン機能との相性みたいなところを整理してみましょう。

特徴

今回はこの辺りに注目します。

  • 利用対象
  • 導線
  • 外部ネットワークの利用による遅延や障害
  • フィッシング耐性

利用対象

当然ですが、サービスがリンクを送信する方法、つまりEmail/SMSなどが利用可能であることが条件となります。 Emailは一般的と言えますし、既存の認証方式に比べて対象者を制限してしまうことはないでしょう。 SMSでリンクを送るとなると、これまでライトな複数アカウント対策などで使われていたようにSIMを準備できる環境という制限があること、送受信に伴う費用についても考慮は必要です。

導線(動線か?わからん)

この方式でログインできるのは、最終的にメールを読んでリンクをクリックした環境になります。

バイスレベルで言うと

となり、さらにリンクをクリックする挙動としても

  • Webメールでクリックしてそのままブラウザで開く
  • メールソフト、メールアプリ内で開く
  • URLをコピペして...

というところで、なかなかのバリエーションが出てきます。これが良いか悪いかの判断について、提供するサービスの特性の考慮が必要です。

  • サービスの多数派ユーザーが上記のどのケースに当てはまるのか
  • リンクが開かれた場所とログインしたい環境が一致するのかどうか
  • 一致しない場合、どのようにフォールバックするのが適切か

などを見極める必要があります。

外部ネットワークの利用による遅延や障害

これは英語の記事と同じですね。届かなかったり遅れたりします。

フィッシング耐性

この方式では、最終的にアクセスするのはサービスの正規のURLとなります。

qiita.com

攻撃者としては、そのURLをユーザから共有してもらえたら、それを使って攻撃者のパスキー登録できる状態になる。 が、通常のログインにおいて、URLをフォームに入力するとか、不自然すぎるからなのか、みたことない。 Emailだったら、HTML mailにしたらURLは簡単に取れないし、さらに難しくなるだろね。

最後のリンククリックの際に正規のURLとなるところで、シンプルにパスワードを奪いにくるレガシーなフィッシング攻撃、URLだけ違うリアルタイムなフィッシング攻撃がそれだけでは通用しないよねという話です。

この辺の過激派としての意見としては、世の中のより広義のフィッシング対策の 怪しいメールのリンクはクリックしない という啓蒙と、この送られてきたメールのURLをクリックするというお作法の相性が気になります。 個人的には別の方法に変えていく必要がありそうですが、難しいところです。

ritou.hatenablog.com

ログイン機能との相性

パスワードリセットとの相性

ログイン機能との相性を考える前に、パスワードリセット機能においてマジックリンク方式が採用されてきました。これはなぜでしょうか? それは、パスワードを再設定したい環境とログインしたい環境が必ずしも一致する必要がない ためです。

一般的なパスワードリセット機能は 身元確認パスワードの再設定 によって構成されます。

zenn.dev

メールを受信したことを持ってユーザーとみなす ことが身元確認であり、そのURLから パスワードの再設定 を行うというのが自然に出来上がったわけです。 サービスによって、上記の処理に加えてログイン状態にしたりもします。

特にこれまではパスワードは 記憶する 前提でした。推測困難、サービスごとに別、正規のサービスのみに入力する という要件を人類が満たせるとは思いませんが、できる場合は「パスワードの再設定」を行う環境に制限はなくなります。 これが、幅広く利用されてきた理由と言えるでしょう。

しかし、今後はどうでしょうか。いつも言っているように、人類はパスワードを記憶するのではなく信頼するシステムに任せることが重要であり、パスキーもその延長です。 ユーザーが登録できるパスワードは一つなのが一般的です。パスワードマネージャーを利用しているユーザーは、いつものパスワードマネージャーが動作もしくは同期する環境で パスワードの再設定 を必要とします。 これを考えるとマジックリンク方式との相性はこれまでよりも悪くなる可能性もある気がしています。

新規登録、ログイン機能との相性

新規登録機能についての考え方はパスワードリセットと似ています。

一般的な新規登録機能は 身元確認パスワードの設定 によって構成されるのでそこまでは一緒です。

メールを受信する環境と新規登録したい環境の違い については次のような設計、実装があります。

  • マジックリンクをクリックした環境で登録処理を完了させ、元々使いたい環境では一度ログインして使わせたらOK
  • 裏で状態管理とかポーリングの仕組みを用意しておき、マジックリンクをクリックした環境で登録処理を完了したら元々使おうとした環境が「登録完了するの待ってるね」から「ログイン状態」にする

ログイン機能についてはより、メールを受信する環境とログインしたい環境の違い が無視できません。 そして、新規登録と同様に マジックリンク方式を使いつつログインしようとした環境をログイン状態にしたらいいじゃないか というわけでもありません。 それをしてしまうと、通知を受けた認証アプリで「ログインする」というボタンをクリックすることでログイン状態にする方式に寄っていき、フィッシング耐性のところで触れた特徴がひっくり返ってリアルタイムなフィッシング攻撃に弱い方法となってしまいます。

英語の記事では色々書いていましたが、やはりこの環境の違いを考慮することが一番重要だと思います。 統合IDや認証基盤といったところになると、それを使うサービスの特性がこの辺りの判断に影響します。 個人的にはログイン方法としてはマジックリンク方式の採用を避けるお気持ちになることが多いです。

マジックリンク方式とメールOTPのハイブリッドな方式

話は少し逸れますが、マジックリンク方式とメールOTPのハイブリッドな方式ってもあります。しかも結構前から。 こちらは頼まれてもいないのにリリース直後の他社サービスの新規登録/ログイン機能を解説した記事です。

ritou.hatenablog.com

(最近は見てないので当時の)bosyuでは、ブラウザの環境(PC/Mobile)によって、マジックリンク方式なのかOTPとのハイブリッドなのかを判断しているように見えました。 環境が異なるときはURLをコピペさせる案内もしています。クロスデバイスやモバイルアプリの利用についても、この辺りはよく考えられた設計といえます。マジックリンク方式を早い段階で採用したmediumもこんなだった気がしましたが、忘れました。 当然、考慮しなければいけないことも増えるわけですが、頭の中で マジックリンク方式はこういうフローで、ダメならやり直し だけではなく組み合わせるという柔軟さは持っていたいところです。

まとめ

まとめです。

  • 最近、パスキー絡みでマジックリンク方式のログインについて書かれることが増えてきた
  • 特徴を見ると、やはり認証フローを開始した環境とメールを受信する環境の違いの部分が重要
  • パスワードリセット、新規登録、ログインという代表的な機能との相性を見ていくと、ログインとの相性が良くないと判断されるケースが一番多そう
  • メールOTPとのハイブリッドな方式の採用例もある

検討時のポイントを書いたつもりが自分が採用しない理由になっている気がしますが、やはりUXは重要です。

開発者観点ではつい こうすればできる を考えてしまいがちですが、様々な状況が考えられる中で ユーザーがうまくやる ことを前提にするのはとても危険な思考であることはこれまでの状況を見てわかるはずです。 パスキー認証と同様、認証方式においては 大多数のユーザーが特に意識せず、あまり頑張らずに使える方法 を用意することが重要です。 要は個別具体で考えるしかないおじさん と言ってしまうとそれまでですが、この辺りを考える際は意識しておきましょう。

ではまた。

認証方式のフォールバック/リカバリー方法の選定において考慮すべきユーザーの状態

ritouです。

kokukumaさんがパスキーのリカバリーについて考察されていました。

qiita.com

サービスがパスキーを利用 -> フィッシング耐性を必要とする前提において

  • 複数の認証方式を利用可能にしておいてフォールバック
  • ユーザー自身でできるリカバリ
  • CS問い合わせ

を用意する際にどう考えたらいいかが整理されています。

フォールバック、リカバリーの基本的な概念について自分が書いた記事を読んで貰えば、少し理解が進むと思います。

zenn.dev

今回は、このように検討されて提供されるフォールバック/リカバリーの仕組みが適切なのかどうかの判断においてもう一つ重要となる、これが必要となった際のユーザーの状態を考えてみます。

当然ながら、これはパスキーに限った話ではありません。

考慮すべきユーザーの状態

ユーザーの状態を考えるにあたり「あるサービスをユーザーがどの環境で利用しているか」を意識しましょう。当然ながら、サービスの提供スタイルによって

  • (1つ|複数)のPCから利用
  • (1つ|複数)のモバイル端末から利用
  • (1つ|複数)のPCと(1つ|複数)のモバイル端末で利用

といった状況が考えられます。

例えばモバイルアプリのみで提供されるmixi2であれば(1つ|複数)のモバイル端末で利用、 LINEのようにモバイルアプリケーションは1つに制限されているが(複数の)PCからも利用可能といった違いがあります。メルカリはどうでしたっけ?

当然、そのようなサービスを利用するユーザーの利用スタイルも

  • (1つ|複数)のPCを利用
  • (1つ|複数)のモバイル端末を利用
  • (1つ|複数)のPCと(1つ|複数)のモバイル端末を利用

と様々になるわけです。

ここから、一番クリティカルな状況と考えられる「モバイル端末が(全て)利用できなくなった」状態ではどうなるのかに注目します。

「モバイル端末が(全て)利用できなくなった」らどうなるのか

いわゆる所持情報を利用する認証方法やリカバリー方法のうち、モバイル端末に依存するものがいくつかあり、今後も増えることが考えられます。 スマートフォンを紛失、盗難、故障などで手元で利用できなくなった場合、その時点で利用できなくなるものがあります。

  • SMS OTP
  • キャリアメールを用いたEmail OTP/Link
  • 回線認証
  • モバイル端末に保存されたリカバリーコード
  • モバイル端末にインストールされたアプリによるポチ
  • 今後出てくるDigital Identity Wallet関係も?

これらの内訳となると、一時的に使えないものと恒久的に使えないものがあります。

  • 一時的なもの
    • キャリアのアカウントやプラットフォーム、3rd Party Password Managerのアカウントに関連するもの
    • ログイン済み/設定済みのモバイル端末を利用するもの
  • 恒久的なもの
    • 個々の端末にしかデータがないもの

前者は新しい端末にアカウントを設定することで復活することができますが、どれぐらいの期間で元通りになるかは個別に事情が変わるでしょう。 キャリアのアカウントの認証自体が理想的とは言えない状況ではショップに身分証を持ち込む方が早いかもしれません。 プラットフォームアカウントについても、同一プラットフォームの別端末の有無などによって違いが出ることがあります。 3rd partyのパスワードマネージャーなどでは認証に既存のデバイスを利用するものもあります。それが失った場合はリカバリーに時間がかかることはあり得ます。

後者はパスキー以前のFIDOクレデンシャルの話と同じです。 Digital Identity Walletに保存されたVCの扱いはこの辺りどうなるのでしょうか?動向にも注目ですね。

サービス側としては、自身が提供するサービスにおいてモバイル端末が利用できない状況において

  • 他の認証方法もまとめて使えなくならないか
  • リカバリー方法も使えなくならないか
  • 復旧に時間がかかる場合も「C2Cの購入が完了しているので発送手続きを進めなければならない」といった状況を問い合わせ対応などで回避できるか

といったところを確認しておく必要があるでしょう。

PC端末が利用できなくなる場合

単純に「連絡先へのコンタクト」に関する機能が異なるため、モバイル端末に比べるとPC端末が利用できなくなり困ることが少ないかもしれません。

モバイル端末をつかってPC向けのサービスにログインする設計のほうが逆よりも多いので、対称ではありません。

依存対象の分離

この文脈で注目したいのは、最初に取り上げたkokukumaさんの記事で「デジタル認証アプリを使ったリカバリ」です。 マイナンバーカードを利用する仕組みは、モバイル端末への依存が少なく、わりと多くのユーザーが取得していることが期待でき、セルフリカバリーとして利用可能です。

UX面ではモバイル端末で完結するものよりも複雑になってしまうものの、このような依存対象の異なる仕組みは有用です。

まとめ

今回はユーザー側の観点に立ち、モバイル端末が利用できなくなる場合にどうなるかに注目しました。

モバイル端末に依存する仕組みが増えると、それが利用できなくなったときにいくら認証方式を多重化しリカバリー方法を用意してもまとめて利用できない状況に陥る可能性があります。

設計、実装した段階では大丈夫だろうと思っていても、問い合わせで気づくこともありますね。モバイル端末に情報が集約する流れを否定するわけではないですが、その前提の上でトラブルに強いサービスを提供したいですね。

ではまた!

qiita.com

効率的な管理よりもまず使う!複数登録可能という特徴を活かしたパスキー利用法

ritouです。

今日は26日ですが、Digital Identity技術勉強会 #iddance Advent Calendar 2024 13日目の記事です。

qiita.com

今回は、複数環境から利用するサービスに対して超積極的にパスキーを使っていくスタイルの紹介です。 みんながこれをすべきという話ではなく、こういう使い方をすると何が良くなるのか、逆に懸念はないのかと言うのを考えて貰えばそれで十分です。

パスキーは複数登録可能

今日、えーじさんがパスキーの現状、そしてユーザー、サービスそれぞれができることについて記事を書かれていました。自分の記事とは違って読みやすい文章です。

blog.agektmr.com

この記事では、この部分に注目します。

複数のパスキープロバイダにパスキーを作る

サービスによりますが、パスキーは本来、アカウントごとに複数作ることができるようにデザインされています。Google パスワードマネージャーと iCloud キーチェーンなど、複数のパスキープロバイダを跨いで複数のパスキーを作ることで、パスキーが見つからない場合のトラブルをだいぶ減らすことができます。誤ってパスキーを消してしまっても、他のパスキーを使って復旧することができます。

パスワードに代わるものと言われていることでイメージしにくいかもしれませんが、パスキーは複数登録可能です。導入サービスのほとんどがそうなっています。えーじさんの記事では選択肢を増やすことで”パスキーが見つからない"となる確率を下げるための"コツ"の一つとして紹介されています。

「パスキーが利用可能な環境であれば片っ端から登録する」と言う使い方

パスキー認証を導入していてパスキー認証以外の認証方式も利用可能なサービスにて「パスキーが見つからない 」となった際、以前から設定していた多要素認証を利用してログインすることになるでしょう。

今回紹介するのは「パスキー認証以外でログイン成功したら、そこでパスキーを登録して今後はパスキー認証を使っていく」と言うものです。

図にするとこんな感じですね。あんまり意味ないです。

ここで登録するパスキーの保存場所(パスワードマネージャー、パスキープロバイダ)は、その環境におけるデフォルトのもので十分です。

仮に利用可能なパスキーが存在する場合、登録時に「もう登録されとるぞ」って言われるかもしれません。それはそれで良かったと言うことですね。

期待できる効果

このお作法をすることにより期待できる効果は次のようになります。

  • 一度利用した環境では次回以降パスキー認証が利用可能
    • 最初に利用したのが「パスワード認証のみ」であれば、今後の「パスワード認証のみ」の試行回数を減らすことによる安全性の向上
    • 最初に利用したのがパスワード認証+αの多要素認証であれば、今後の(パスキー認証による)フィッシング耐性の獲得と利便性の向上

この文脈ではあくまで副次的な効果として、モバイル端末のプラットフォームがデフォルトで提供するパスワードマネージャーを使うと、今後「クロスデバイス認証」を利用できるようになる、と言うのもあります。

パスキー登録をしまくって問題は起こらないのか

一番の懸念は、パスキーの登録可能な数に制限がんるとそれに引っ掛かるかもしれないと言う点です。 自分のところでは最大5個に設定してあって、これぐらいあれば大丈夫かなと言うところでしたが、サービスによって違うかもしれません。

どんどん新しい端末やブラウザでパスキーを登録したけど、ログインできる環境が増えることで今度はそれが悪用されないか心配、と言う考えを持つこともあるでしょう。その端末自体を掌握されてしまうとその可能性はありえますし、パスキー認証においてその部分は「ローカル認証で他のアプリなどと同様のレベルで守る」というのが前提になっているとも言えます。

とはいえ残っているのは気持ち悪いので、サービス側の管理機能から不要になったパスキーを削除/無効化するのが良いでしょう。そのパスキーでは今後ログインできなくなります。

OAuthが普及し、API提供側でやらかしが起こった時に「連携サービスを見直す」と言う習慣が少し出てきたと思います。 パスキー認証が普及してきたら定期的にこの辺りを見直す習慣についても広めていきたいですね。

パスキーを登録した端末が壊れてしまったらどうするのか

上述の通り副次的な効果はあるとして、基本的にはどんどん新しい端末でパスキーを使っていくというだけの話なので使えなくなった場合についてはなんとも言えません。(追記: パスキー認証でないとログインできない状態ではなく、パスキー以外の方法でもログインできることを前提としています。それはパスキー認証"自体"の話ではないので触れません) 紛失などの場合はサービス側の管理機能から削除/無効化しておきましょう。

サービスは推奨すべきか

これは「すべきではない」でしょう。

現在、パスキー認証をサポートするサービスが行っているパスキープロモーションの条件は「パスキーを登録していないユーザー」と言うものが多いかと思いますが、これを「この環境でパスキーを登録/利用していないユーザー」となるとユーザーに対する圧が強すぎます。

これを色んなサービスでやるのは大変!

それはそうですね。異論ありません。世の中のサービス全部にこれをやるとなると、ユーザーの負荷はとても大きいです。 そもそもこの使い方、パスキーがFIDOクレデンシャル/FIDO2クレデンシャル、パスキー認証がFIDO認証とか呼ばれていた頃のプラクティスと言えます。パスキーが同期されることで、このような毎度の登録が省略できるわけですが、えーじさんの記事にもあるとおりまだまだ同期できないケースはあります。そんな中で、自身でパスキー認証の頻度を上げるための取り組みといえます。

対象の選定で言うと、今回の方法が効果的となるのは次のような場合でしょう。

  1. 複数環境から利用するサービス
  2. 個別の環境毎でみた時に、ログインする機会の多いサービス(セッションが短い、決済などがあって再認証を要求される)
  3. ID連携のIdPをしているようなサービス

こんなサービスはそうそうなさそうですが自分の中で「このサービスだけはパスキー優先でいきたい」と言うのがあったらやってみても良いでしょう。

まとめ

あるサービスに対してパスキーを複数登録可能という特性に注目し、「使える環境では登録する」と言う利用スタイルを提案してみました。

多くのサービスはパスキー認証のみ利用可能にはなっていません。この状況はしばらく続くでしょう。 「自分のパスキーが同期していないが、パスキーが利用可能な環境であれば都度登録して使っていく」と言う利用方法により、なるべくパスキー認証の利用頻度を増やし、他の認証方式を使ってフィッシング被害に遭うことを減らす効果につながったら良いなと思います。

ではまた!

パスワード、パスキー、生体認証...どんなユーザー認証にも"詰み"はあり得る

ritouです。

最近何度かパスキー関連の記事を書いていて、こんなコメントをいただくことが増えてきました。

”もちろんパスキーでも詰んでしまうことはあり得るのですが” そこだよな

”パスキーでも詰んでしまうことはあり得る“話にならん、何言ってんだ?リカバリ方法のないそんなもん使おうと思う訳あらへん。

別件ではパスワード認証が詰まないと書かれているのも見かけましたので、一回整理しておきましょう。

「どんな認証方式でも、詰む」

パスワード、メールやSMS OTP、メールで送られるマジックリンク、認証用アプリ、TOTP、生体認証、パスキー...全ての認証方式で「詰む」状況というのはあり得ます。

  • 知識情報 : 忘れる
  • 所持情報 : デバイスや環境をなくす、一時的に利用できない
  • 生体情報 : 関連する器官の欠損、怪我など

もちろん、その頻度や条件が異なります。

FIDO認証からパスキーに変わった部分でも、あまりにも「詰む」可能性が大きいために実用的ではないねとなっていたところをパスワードマネージャーの同期を利用して改善しようという流れになったわけで、そのパスワードマネージャーにアクセスできなくなったり、同期している端末全てにアクセスできないなど詰む状況はあり得ます。

ソーシャルログインでも同じです。 OpenID Connectの啓蒙をしてきた中でも、「GoogleアカウントがBANされたらどうするんだ」「一時的にGoogleが使えない状況だったら」と指摘を受けまくってきました。

パスワード認証はもっとも詰みやすい方式と言えるでしょう。 詰んでいるので「パスワードを忘れた方はこちら」からメールアドレス入力画面へと遷移してリカバリーフローに入るのです。

  • 個々の認証方式には必ず「詰みポイント」が存在する
  • サービス側はその可能性などを踏まえて複数の認証方式を用意して当人認証をなんとか成功させられるようにしたり、身元確認してクレデンシャルの再設定を行うリカバリーフローや問い合わせ対応の仕組みを用意しています

なぜパスキーのリカバリーに注目が集まるのか

この辺りはパスキーの導入パターンと関係しています。

  • 利便性観点 : 既存のパスワード認証 + 追加認証と同等の扱いとして導入
  • (利便性に加えての)安全性観点 : ログインや特定機能の保護のためにパスキー認証のみに対応する形で導入、利用できない場合は問い合わせして本人確認

前者はパスキー認証を使うことで「便利に使える手段を増やす」ことを実現できます。一方で「最低の認証強度は変わらない」「別の方法でフィッシングにやられるかも」「パスワード認証を無効化できないなら意味ない」と言った反応をもらうこともあります。

後者は認証強度やAAL/IALと言った概念を導入し、一定の基準を超えるものだけを選択肢とする設計です。 パスキー認証で詰む条件とその後に求められるリカバリーフローの要件(フィッシング耐性やAAL/IALの設定)がある場合、ユーザーに課せられる負荷が高くなってしまうことがあり得ます。

サービスはパスキー認証を導入することで何を得たいのか、どのようなユーザーを保護するのかをよく検討し、ユーザーにとって高いハードルとならないための設計が必要となります。

現状はこの辺りを意識しているサービス、していないサービスそれぞれが存在しているので必ずしも良い印象を持たれていないと考えられます。 それぞれ「詰む」可能性のある認証方式とリカバリーフローをうまい具合に組み合わせて、ユーザーから見たときに「詰みにくい」認証フローを実現していく必要があります。

まとめ

  • 全ての認証方式が詰む。パスキーも詰むし、ID連携でさえも詰む。パスワードはもっと詰む
  • 「利便性向上」と「利便性+安全性の向上」どちらに重きを置くかという判断で導入パターンが変わり、前者より後者の難易度が高い
  • サービス開発者は自サービスの特徴、ユーザーの利用形態などを踏まえた上で全体として「詰みにくい」フローを実現する必要がある

以上です。

この記事をDigital Identity技術勉強会 #iddance Advent Calendar 2024 5日目の記事として、終わりたいと思います。

qiita.com

ではまた!

安全な認証のためにユーザーに使わせるべきは「パスキーも扱えるパスワードマネージャー」である

ritou です。

先日、こちらのイベントで(リモートで)お話ししてきました。

大学ICT推進協議会2024年度年次大会

OpenIDファウンデーション・ジャパン エバンジェリストを名乗ってOpenID Connectの話ではなくパスキーの話をしました。最近よくありますね。

今回はユーザー向けの「パスキーの啓蒙」もとい「安全なユーザー認証の啓蒙」について考えていたことをお話させていただきました。

その資料をベースに色々付け足したら長編になってしまいました。お時間がある方に見ていただけるとありがたいです。


(今後、ユーザー認証を安全にしていくために)パスキーへの移行を見据えたユーザーの準備についてお話しします。

みなさんご存知の通り、パスキー認証に注目が集まっています。

パスキー認証は他の認証方式とどう異なるのかを認識するため、初めにユーザー認証の変遷について整理しましょう。

オンラインサービス、特にコンシューマー向けで使われている認証方式というのは、脅威と対策の繰り返しにより変化してきました。

まずは「パスワード認証のみ」が使われていたところから、「他の認証方式との組み合わせによる2要素/2段階認証」が登場したところまでを見てみます。

パスワード認証の現状についてはよく知られているところでしょう。

サービスに対する脅威はいろいろありますが、その中で「第3者によりリモートで行われる不正ログインの脅威と対策」に注目が集まりました。ほとんどのユーザーはパスワード認証にて求められる要件を満たせていません。サービスもパスワードの安全な管理が求められますが、たびたびパスワードの漏洩という事案が発生しました。そのような状況において、基本的な実装に不備がないサービスでさえも他のサービスから漏洩したパスワードなどによる各種攻撃を受けるリスクがあります。

そこで知られることになったのが「認証要素」という概念です。

「認証の3要素」と呼ばれたもののうち、パスワード認証は知識情報を利用する認証方式です。 パスワードを第3者に知られてしまうと、突破されてしまいます。 レガシーなフィッシングサイトではユーザーの識別子とパスワードの組み合わせを狙うものでした。

そこで、知識情報以外を利用する認証方式と組み合わせる方式が出てきました。 代表的なものとして、パスワード認証の後にSMSなどで送られたOTPを入力したり、Google Authenticatorなどで生成されたTOTPを入力するものがあります。 攻撃者はレガシーなフィッシングサイトによりパスワードのみを取得して後から不正ログインを試みても、追加認証のところで止められます。 所持情報を利用する認証方式を突破するためにはデバイス、アプリなどの特定環境にアクセスできる必要があります。

このように、従来のフィッシングサイトなどで取得したパスワードを利用するリモートの不正ログインに対する対策として、2要素/2段階認証と呼ばれるスタイルが広まりました。

攻撃者も黙ってはいません。 2要素/2段階認証を利用しているユーザーに対してフィッシングサイトがユーザーと正規のサービスをつなぐ立ち位置となり、ユーザー認証を中継する形で最終的に正規のサービスから発行されたログインセッションを狙う攻撃(MiTM, AiTM)が出てきました。 というか、前からあったものが使われるようになったという感じです。 厳密にはセキュリティキーのように、この後紹介するFIDO認証のようにこの攻撃が通用しない認証方式もありました。 ただ、一般的に使われていたメール/SMS OTPやTOTP、認証アプリに通知が来て許可のような方式ではこの攻撃を防ぐことが困難です。

この辺りから、パスワードレス認証の概念が出てきました。 他の認証方式と組み合わせても安全性が保てないパスワード認証をあえて利用せず、都度ログイン用URLを送るメールリンク方式やEmail/SMS OTPのみでログインできるサービスが出てきました。 2要素/2段階認証からの「引き算」をすることで、サービス側の開発運用コストを下げることができ、パスワード認証に関連する攻撃を受けることがありません。 しかし、裏返しとして所持情報を利用する認証方式自体の課題に対して注目が集まりました。メールを受信するための認証強度、SMSを受信するために必要なSIMカードに関する課題などですね。

そんな中、これまでとは全く別の仕組みであるFIDO認証に注目が集まり、現在のパスキー認証へと続きます。

FIDO認証をすっ飛ばしてパスキー認証の特徴として、次の3点があります。

  • 公開鍵暗号方式の署名生成/検証の仕組みを認証機能に適用 : パスワードの管理や通信内容と比べての安全性向上
  • 利用するユーザーの検証についてはデバイス単位のローカル認証を利用 : 「ロック解除して利用する」という、モバイル端末のアプリ利用と同じ方法、ちょっと似たUXによる利便性向上
  • ブラウザがサービスが認証要求時に指定したドメイン(オリジン)と現在アクセスしているものの一致を検証 : 中継型フィッシング攻撃にも有効なフィッシング耐性

こうやってパスキー認証に触れると「パスキーはデバイス毎に保存されるんでしょ?無くして詰んだことがあるからもう使いたくないんや」みたいな反応が見られます。 もちろんパスキーでも詰んでしまうことはあり得るのですが、この部分が「FIDO」から「パスキー」への進化におけるポイントです。

FIDO認証ではデバイスのセキュアな領域にクレデンシャルが保存される、という堅牢性が売りの一つでした。 当然ながら新しいデバイスを利用する際にクレデンシャルの再登録が必要になります。 対応サービスが増えれば増えるほど、機種変更時の作業が重くなるとしたら普及は難しいでしょう。 かといって最初から複数デバイスやらセキュリティキーとの組み合わせなど、ユーザー側で冗長な構成にするというのも大変です。

それに対してパスキー認証ではクレデンシャルの保存場所としてパスワードマネージャーを利用します。 パスワードマネージャーがクレデンシャルを同期していれば、新しいデバイスを使い始める際にもこれまで通りオンラインサービスが利用できます。 安全性が下がるのでは?という意見はごもっともですが、「最強の認証方式」ではなくより現実的に一般ユーザーが利用しやすいところに持ってきたと捉えるのが良いでしょう。

すでに長くなりましたが、ここまでの話は明日発売される「Software Design 2025年1月号」の「第1特集 認証技術の最前線 パスワードレス認証「パスキー」のしくみと実装」の1,2章で取り上げています。宣伝です。是非ご覧ください。

gihyo.jp

次に、パスキー認証の啓蒙について考えてみましょう。

パスキー認証の啓蒙にはざっくり言って3つのフェーズに分類できるでしょう。

まずはサービスの開発者に使ってもらうフェーズです。「パスキー認証とはこういうものです、先行実装しているサービスはこの辺りです。」を説明した上で「とりあえず使ってみて良かったら自サービスでもやってみないか?」という内容です。

Chrome for Developersから出されて評判の良い動画もこの辺りですね。

www.youtube.com

そして、サービスの開発者に実装してもらうフェーズです。いわゆるWebAuthn APIの使い方、既存のユーザー認証機能というかID管理機能への組み込み方と言ったところにフォーカスし、対応サービスを増やしてもらおうという取り組みです。

来年1月に発売される「パスキーのすべて」という本の表紙を見る限り、この辺りの内容も含まれそうです。

そしてユーザーに使ってもらうフェーズです。「いろんなところでパスキー認証使えるよ。安全な仕組みなので使ってみてね。」みたいなところです。

現状、どこまで進んでいるかというと2つ目の開発者に導入を促すフェーズでしょう。 パスキー認証を利用するためにサービスが呼び出すブラウザAPIであるWebAuthn APIの仕様は、現在も策定が続けられています。 より安全で使いやすくなるための進化が続いているということです。 このような枯れていない技術を導入するということで、サービスの開発者は一度導入したら良いわけではなく最新の情報を取得しつつ更新していく必要があります。頑張っていきましょう。

前置きが長すぎてしまいましたが、「ユーザー向けにはどう啓蒙していったら良いの?」というのが今回の話のメインです。 今回は「ユーザーへのパスキー認証の啓蒙」というより「認証をより安全にするためのユーザーへの啓蒙」という観点で見ていきます。

そのために、まずは保護すべきユーザーの解像度をあげましょう。

過渡期と言われている現在、パスキー認証を導入するサービスが増えてきました。 その導入スタイルとしては、パスワード認証とTOTPの組み合わせのような「2要素認証、2段階認証と同等の扱い」としてのオプショナルな導入と、特定機能やパスキー登録ユーザーに対して必須化するようなサービスも出てきました。

どうしてもネガティブな反応に注目してしまうもので、前者に対しては「パスキー認証に対応してるのにパスワード認証は使えるんかい!」、後者は「パスキーってなんなんだ。設定しようとしてもうまくいかん」といったより厳しい反応が見られます。

今後「パスキー認証のみで利用できるサービス」が出てきた時に、運用していくのはなかなか困難な道のりになりそうだなというところです。

このような現状において、パスワード認証のみを使うユーザー、別の認証方式を組み合わせて使っている(使わせられている)ユーザー、パスキー認証を使うユーザーのようにいくつかの状態があり得ます。

「パスキー認証使ってください」と言って使ってくれる人はそれはそれでいいのですが、そういう人だけではないことが現状の反応を見ていれば明らかです。

現在、パスキー認証を使ってないユーザーはパスキー認証を使うまでは中継型フィッシングなどのリスクがある状態のまま放置でいいのでしょうか?

現在パスキー認証を使ってないユーザーも保護しつつ、パスキー認証に移行してもらうような啓蒙ができるのが理想的です。が、そんなことできるのでしょうか?

キーワードは「パスワードマネージャーの利用促進」です。

「パスキー全然わからん」となる理由はいくつか考えられますが、ここでは「新しいものを覚えるハードル」に注目します。 「パスワードを記憶して入力するパスワード認証」と「システムにより管理するパスキーを使うパスキー認証」の違いについて、開発者むけでもこれだけ丁寧な説明が繰り返されている状況で、一般のユーザーに「細かい話はできないけど良いものだと伝えて使ってもらう」ハードルはとても高いでしょう。

そこで、この2つの間に「システムにより管理するパスワードを使うパスワード認証」を加えてみます。 まずはパスワード認証のまま、これまで記憶していたパスワードをパスワードマネージャーで管理し、ドメインなどの判定を元にした自動入力を利用しましょう、その次に「管理対象をパスワードからパスキーにしてみましょう」という啓蒙ができます。 これにより、これまでのように「全く別物」として捉えるのではなく「段階的に変化したもの」と捉えられるのではないかと考えています。

「管理対象をパスワードからパスキーに」という部分を説明します。

一旦、パスワードマネージャーについて特徴とそれに対する懸念点も合わせて認識しましょう。

パスワードマネージャーを使うことで推測困難なパスワードを作成可能ですが、サービス側で許容している文字種文字数などが決められるものなので限界はあります。英数8文字とか言われてしまうとうーむとなってしまうわけですね。

サービス単位のパスワード管理、自動入力という機能は、フィッシング耐性を考えるにあたってとても重要です。 パスワードマネージャーはパスワードを送信した際、アクセスしているドメインに対して一緒に送られたユーザー名やメールアドレスと共に管理されます。そして、そのドメインと完全一致、部分一致など独自のロジックによって自動入力の対象となるかが決められます。 そして、フィッシングサイトなどでドメインが一致せず自動入力が動かなかった場合でも、ユーザーがパスワードマネージャーからパスワードをコピペしようと思えばできます。

「サービスが十分に安全なパスワード文字列を利用可能にし、ログイン画面のドメインなどパスワードマネージャーとの親和性の良い構成とし、さらにユーザーがパスワードマネージャーの挙動を完全に信用する」という前提条件が揃わないとフィッシング耐性を持てないわけです。

また、異なるデバイス間での同期の話もあります。

このパスワードマネージャーがパスキー認証をサポートした場合、どうなるでしょうか。

推測困難なパスワードを生成可能、という部分についてパスキー認証においては公開鍵暗号方式における秘密鍵、公開鍵のペアといった扱いになるでしょう。もちろん同じ秘密鍵が生成されまくったら大変なことになりますが、この辺りは信用していいでしょう。サービス側で指定する部分としては、署名生成に利用可能なアルゴリズムを指定する仕組みとなっています。

サービス単位の管理と自動入力に対応する部分で言うと、パスキー認証では管理対象のドメイン(オリジン)はサービスが指定します。 そして、パスワードマネージャーを使ったパスワード認証ではパスワード文字列そのものをコピペするとフィッシングサイトに渡せてしまいますが、パスキー認証で同様の挙動、つまり現在アクセスしているドメイン(オリジン)とは異なるサービスに対する署名付きデータをフィッシングサイトが手に入れることは困難です。

こう整理すると、パスワードマネージャーを使う前提において「パスワード認証が進化したものがパスキー認証」と捉えられます。

パスワードマネージャーを利用しているユーザーに対し、パスワード認証からパスキー認証へアップグレードを促進する機能がいくつか用意されています。

Passkey Autofillという仕組みは移行促進のための機能ではないですが、既存のパスワード自動入力と同等のUI/UXでパスキー認証を利用可能です。

Google Password Managerではパスワードを保存しているサービスのうち、パスキー認証に対応しているサービスについてパスキー使ってみないか?と利用を促進する機能が用意されています。

AppleのパスワードアプリではPasskey Auto Upgradeと呼ばれる機能をサポートしています。

このような「システム管理されているパスワード認証」から「パスキー認証」への移行を促進する仕組みにより、ユーザーに負担をかけずに「記憶で管理されているパスワード認証」から「パスキー認証」への段階的な利用促進が実現できます。

Passkey Autofillを利用することで、システム管理されたパスワードと同等の扱いでパスキーの利用を提案されます。 自分のAndroidのバージョンは最新ではないですが、対象サービス向けに保存されているパスワードとパスキーが並べて表示されます。 MacOSSafariではパスワードとパスキーの両方が保存されている場合はパスキーの方が優先されたりもします。

Androidの新しいバージョンのパスワードマネージャーでは「このサービスではパスキーが利用できます」という表示が行われ、パスキーの登録、管理機能へのリンクが表示されます。これはサービス側でメタデータを公開することで実現されています。

Apple系デバイスではパスキー認証を導入したサービスでパスワード認証を利用したタイミングでパスキーの自動生成ができます。 これを使うためにはサービスが自動生成を要求しつつ、パスワードマネージャー側が対応する必要があります。

まとめです。

パスキー認証など、脱パスワード認証のユーザーへの啓蒙について整理しました。

パスキー認証について開発者向けの啓蒙フェーズは進んでおり、サービスへの導入が進んでいます。 これから重要となるユーザー向けでは、開発者向けとは異なり「仕組みの説明」よりも「使い方の説明」にフォーカスする必要があります。

サービスが対応しない、パスキーが同期しないクロスプラットフォームでの利用などでどうしてもパスワード認証のみ、パスワード認証と別の認証方式を組み合わせた多要素認証を利用するユーザーは現状も今後も世の中にたくさん存在することを意識する必要はあります。

特に認証方式については「新しいものを覚えて使う」コストというかハードルがとても高いものであり「パスキーという新しい仕組みができたよ!」という啓蒙で普及させることは困難だと考えられます。

ユーザー向けの啓蒙において重要となるキーワードは(パスキー認証に対応した)パスワードマネージャーです。

パスキー認証を利用するためにはパスワードマネージャーの利用が必須となります。

パスキー認証をまだ使っていない、サービスが対応していないなどの理由からパスワード認証を使っているユーザーに対しても、完全ではないにせよフィッシング耐性を持てます。パスワードマネージャーを導入している状態で記憶していたパスワードを手入力して認証すると、パスワードマネージャーへの保存が促され、次回以降に利用できます。これは記憶による管理からシステム管理によるパスワード認証のアップグレードです。

さらに、システム管理されたパスワード管理からパスキー管理へ、つまりパスワード認証からパスキー認証へのアップグレードを促す仕組みを用意されています。

パスキー認証に対応したパスワードマネージャーの利用を促進することで、「記憶を用いたパスワード認証」から「システム管理されたパスワード認証」そして「パスキー認証」へと段階的な利用促進を促せると考えています。

以上、皆さんで便利で安全な世の中を目指していきましょう。


発表スライドと補足は以上です。

今回はユーザー向けの啓蒙について考えてみましたが、これを踏まえて開発者向けの啓蒙においても、パスワードマネージャーの重要性について説明することが必要だと考えます。 パスキーはパスワードマネージャーを強制する仕組みです。パスワード認証に対して「任意」とはいえ普及させておく、その上で管理する情報をパスワードからパスキーに変えて貰えばパスキー認証の利用促進につながります。 ユーザーへの説明だけではなく開発者への説明においてもこの辺りにフォーカスしてもらったらいいなと思います。

また、こういう話をすると、パスワードマネージャーの信頼性が気になる方も出てくると思います。 最近だとこちらの記事についての質問をいただくこともあります。

sqripts.com

自身で覚えるのではなくパスワードマネージャーに依存するため、このような疑問や不安が出てくるのは当然です。 あとは、パスワードマネージャーの選定あたりですかね。ユーザーとしてはもちろん、開発者としてもサービスによっても使われ方が多様化している中で、どのパスワードマネージャーをお勧めしたらいいのか、できるのかという悩みもあるでしょう。

現状ではこれらを課題であると認識することが重要であり、どうしたらその課題を解決できるかを検討すれば良いわけです。 良い意味で課題感、危機感を持ち続けながら進めていきましょう。

Digital Identity技術勉強会 #iddance Advent Calendar 2024 17日目の記事ということにしましょう。

qiita.com

ではまた!

mixi2使ってみてね

パスキー認証の必須化/強制についての現状の課題と改善のための勘所

ritou です。

Digital Identity技術勉強会 #iddance Advent Calendar 2024 初日の記事です。今年も頑張りましょう。

qiita.com

パスキー認証の理想と現実

パスキー(というかFIDO)認証はパスワード認証を用いた脆弱な現状を打破すべく考えられた仕組みです。メディアの取り上げられ方はこんな感じでした。

  1. とても安全で便利な仕組み
  2. プラットフォームを跨いだ利用が可能
  3. パスワードを置き換える

1の安全性については技術的に説明されています。最もシンプルな使い方であれば「慣れ」ることで便利さも感じられるかと思います。

2はプラットフォーマーやパスワードマネージャーが頑張っているところです。Appleがいち早く同一プラットフォーム、クロスデバイスな環境における同期を確立、Google Password ManagerはChromeが動作する環境でパスキーが同期されるというクロスプラットフォーム戦略に乗り出しました。Windowsも進捗が報じられています。 現状への満足度はユーザーごとのデバイス利用スタイル、あるいは信仰により異なると思いますが、時間が経てばそれなりのところまでまではいけると信じています(お願いします)。

今回注目するのは3です。「パスワードの時代はオワタ。パスキーの時代が来るぞ」という売り込みだったわけで、それを見た人は当然ながら「パスワードがパスキーに置き換えられた時代」というのを想像してしまいます。 そのため、続々と発表される「○○がパスキーに対応しました」と聞いて実際の挙動を見た結果「なんだ、パスワード認証の無効化まではできないんかい」という反応になったりします。 そんな中で、いくつかのサービスは実際に「パスキー認証の必須化」に乗り出しました。

必須化に乗り出したサービスと嫌われるパスキー

必須化と言っても、いくつか種類があります。現状見かけるのは次の2パターンです。

  • 特定機能を利用する場合はパスキー認証を必須とする
  • ログインする際にパスキーが登録されていたらパスキー認証を必須とする

前者の例で言うと、メルカリのパスキー対応の最初の頃はメルコインという機能で必須化されました。 そして、dアカウントは今年7月からオンラインショップ(など?)でパスキー認証必須の対応がされました。

onlineshop.smt.docomo.ne.jp

後者で言うと、メルカリは全体のログインに対して、パスキーが登録されているユーザーに対してパスキー認証を必須にする対応を開始しました。

help.jp.mercari.com

他にも同様の対応が行われているサービスはあるようですが、自分のXの観測範囲で反応、というかdisが大きいのがこの2つのサービスです。

togetter.com

なぜ嫌われるのか

ネガティブな反応を生んでいる理由はいくつか考えられますが、大きいのは次の3つだと考えられます。

  1. パスキーを知らない人に対しての説明、啓蒙が不十分
  2. パスキーを必須化するフローのナレッジ、プラクティスが不足している
  3. クロスデバイスクロスプラットフォームの難易度が高い

それぞれ見ていきましょう。

不十分な啓蒙

1について、あるサービスがパスキー認証を実装し、ユーザーが使い始めるまでの啓蒙には次のようなステップがあると思います。

  • ステップ1: サービスの開発者にパスキーを知ってもらい、ユーザーとして使ってもらう
  • ステップ2: サービスの開発者にパスキーを自サービスに導入してもらう
  • ステップ3: ユーザーにパスキーを知ってもらい、使ってもらう

サービスに実装されないと使うも何もないわけなので、ステップ1としてはまずは開発者にパスキーってこう言うものだよ、まず使ってみてねと言うステップが必要でしょう。 公開鍵暗号方式(の署名生成/検証の仕組み)が使われていてローカル認証が要求されるってあたりのざっくりとした解説、既に導入しているサービスのUXを見て何かを感じてもらうことで自サービスへの導入を検討してもらうことがGOALです。 ちなみに知り合いのAuth屋さんのパスキー本はここを狙って書かれています。カシコイ。ミンナヨンデ。

booth.pm

その次、ステップ2ではパスキー認証をサービスに導入するためのステップです。 実装の基本となるパスキーの登録/認証で何が行われるのか、WebAuthnの使い方、既存のID管理の仕組みへの組み込み方といったところを覚えてもらい、自サービスに導入してもらうことがこのステップのGOALです。

私はFIDOアライアンスに無関係なので正確ではないかもしれませんが、FIDOアライアンスがしている啓蒙活動としてはこのステップ2に相当するものが多い気がします。 パスキー認証は仕様自体やプラットフォームの対応が日々進められているので、一旦実装された後でもより使いやすいUXを提供するための改善を繰り返していくことも重要です。これはサービスだけではなく、ブラウザ、認証器それぞれにおいて言えることです。今は過渡期と呼ばれていると思うので、しばらくはわちゃわちゃしながらやっていくしかなさそうですね。 そう言えば、まさにこのあたりをターゲットにしてそうなタイトルの書籍が1月に出るみたいです。内容どうなるんでしょうか。楽しみです。

パスキー 導入・UX設計・実装リファレンス | えーじ, 倉林 雅, 小岩井 航介 |本 | 通販 | Amazon

こうしてサービスにパスキー認証が実装された後で、ステップ3のユーザーがそれを使うための啓蒙フェーズに入るわけですが、正直このステップの啓蒙についてはまだ十分ではないだろうと思っています。私は普段から「お前偉そうにパスキーの解説しまくってるけど、家族にその説明通用すると思うんか。全然わかりやすくないから。」みたいなことを言われることがたまにあるのですが、そりゃ開発者向けの啓蒙とユーザー向けの説明は違うでしょう。

では、ユーザー向けにどのような啓蒙が必要なのかということで、自分がユーザーに向けて言いたいことは「パスワードマネージャーを使いましょう」一択です。(追記: ブクマで指摘があったので補足します)これはパスキーを使うなという話ではありません。

メディアなどで語られるパスキー万歳の主張では、パスワードより優れたパスキーがやってきた!っていう感じで

パスキー >>>>越えられない壁>>>>パスワード

という整理をした後に「新しい仕組みを使ってみよう、覚えてください」的な説明になりがちです。 しかし、それでは心理的なハードルも高すぎて使おうとはならない気がします。 そこで、間にパスワードマネージャーの話を入れて、2段階で説明してみましょう。

  • パスワードを「覚える」から「パスワードマネージャーで管理する」 : 推測可能なパスワードはだめよ、使い回しはダメよ、フィッシングサイトに入れちゃダメよ。でもそんなの覚えられないよね。まずパスワードマネージャーってのを使ってみてよ。難しいことはシステムに任せようよ。パスワードマネージャだけ他の人に使わせないようにできればいいよ。
  • パスワードマネージャーにより管理される「パスワード」から「パスキー」: パスワードマネージャーが作ってくれるのが文字列よりも安全なものになって自分でコピペとかもできなくなるし、それを入力するかどうかの判断の精度も良くなるよ。より難しいことをシステムがやってくれるんだけど、(Autofillにより)見た目もほとんど一緒だし、ロック解除してアプリを使うみたいな感覚でサービスを使えるようになるんだよ。

これだとどうでしょうか?全く別物であり越えられない壁がありそうだった両者を段階的に繋いでいけそうではないですか?

パスキー >>>システム管理されたパスワード>>>覚えるパスワード

これが、パスワードマネージャーを使わせることが大事だという主張です。この辺りはまた別途まとめたいと思います。(追記終わり)

話を戻して、自分が関わるサービスがパスキー認証を導入する際に、説明文言などはニンテンドーアカウントが参考になるなぁという話が出ていました。

support.nintendo.com

パスキー認証を必須化のためには、これまで以上にユーザー向けの啓蒙が必要になると考えています。 パスキーについて詳しくなってもらう必要はないというか無理だと思うので、とにかく「どうやったら使い始められるのか」「この場合はどうしたらいいか」と言う問いに対する答えを用意していって安心して使ってもらえる環境にすることが重要でしょう。

サービス側のナレッジ不足

次はサービス側の実装に課題がないのか、と言うあたりです。

先ほど

実装の基本となるパスキーの登録/認証で何が行われるのか、WebAuthnの使い方、既存のID管理の仕組みへの組み込み方

と書きました。

パスキーを用いたログインについてはある程度プラクティスもできていて、マネーフォワード IDが素晴らしいUXを提供できているようにAutofillに賭けておけば間違いないと言う感じはあります。

moneyforward-dev.jp

パスキー登録についても、Appleが対応したPasskey Auto UpgradeなどによるUX改善が見込まれています。 ここまででわかる通り、現状において最もフォーカスが当たっているのは「パスワード認証 + αを使っていたユーザーのパスキーへの移行」です。 パスキー認証の必須化については先行実装者によるチャレンジの段階な訳なので、あるサービスの開発者がそこに挑んで良いUXを手に入れるためのハードルは高いでしょう。パッと想像すると、

  • パスキー登録済みユーザーにパスキー認証を要求する
  • パスキー未登録ユーザーをパスキー登録フローに誘導する
  • パスキー登録済みかつ利用不可能なユーザーをリカバリーフローなどに誘導する

あたりが思いつきます。なんとかなるか、と思ったりもするわけですが、実際画面やフローを作り出してみるとそれこそWebAuthnの処理以外の部分で考えることが多いなーとなります。

(ブクマで指摘があったので追記)その中で、特に重要なのが最後のリカバリーです。パスキー認証が任意の場合、他の認証方式を使えですみますが、必須となるとリカバリーが必要です。具体的には、

  • KYCによる本人確認
  • パスキーのリセット

というあたりでしょう。Xでもメルカリに問い合わせてリセットしてもらったというのを見かけました。 プラットフォームの対応のところで触れましたが、まだまだ同期されないパスキーを失ってしまうことはあり得ますし現状ではその可能性が小さくありません。(ちょっと前からこの話題は触れにくいんですけど)メルカリが仮にこの問い合わせ対応にすんごいコストをかけて迅速親切にKYC+リセット処理を捌けていれば、もしかしたらXで呪詛を吐かれなかった可能性もあると思います。ということで、必須化にあたってはリカバリーが誤魔化せない課題となるわけです。(追記終わり)

その辺りを含めて、既にパスキー認証の必須化に取り組んでいる皆さんは、ぜひその経験を活かしてプラクティスの作成やガイドラインの策定に繋げてもらいたいところです。

クロスデバイスクロスプラットフォーム対応

最後に悩ましいのがクロスデバイスクロスプラットフォーム対応についてです。 メルカリの場合、モバイル端末でメルコイン用にパスキーを登録した後に、PCのログインでパスキー認証が求められて大変だったわ〜、みたいなのがXの反応から見て取れます。このクロスデバイスクロスプラットフォームの利用時に詰まってしまう原因としては2つあるかなと思います。

  • Hybrid Transportsに非対応な環境なので技術的に詰んでいる
  • 私はパスキーとやらを知らない。何もわからない

前者について、どうしてもHybrid Transportsがサポートされてない環境があることは知られています。これは仕方ないですね。 あとはモバイル端末で登録したパスキーをPCで使うことはできるが、PCで登録したパスキーをモバイル端末で利用することはできない、という一方通行となるケースもあり、それにハマってしまうとなかなか辛いです。

このあたりについては、サービスの利用状況からパスキー認証の必須化に踏み切れるかどうかが決まってくるとも言えます。 あるサービスを使う際に、

  • 単一のモバイル端末のみ
  • 単一のPCのみ
  • 複数のモバイル端末
  • 複数のPC
  • モバイル端末とPC...

と色々あるわけですが、単一のデバイス内で完結するのであればパスキー認証の必須化もある程度容易であると思います。 しかし、モバイル端末とPC両方から使われるとなるとメルカリのような課題が出てきそうですねと。 さらに細かくみると、(今はなんかごちゃごちゃしてますが昔の)LINEのようにモバイル端末の利用が中心、PCで利用する際にもモバイル端末を使ってログインできるみたいなサービスであればパスキー認証の必須化のハードルは低いでしょう。

開発者であればこの辺りの考えはなんとなく想像できるでしょうが、あまり明確に意識されてはいない気がします。 ここで、2022年のプラットフォーマーの表明の際の実現させたい2つの機能みたいなのを思い出してみましょう。

www.apple.com

  1. ユーザーは、新しいデバイスを含む多くのデバイスで、FIDOサインインの認証情報(「パスキー」とも呼ばれます)に自動アクセスできます。アカウントごとに再登録する必要はありません。
  2. ユーザーは、使用しているOSプラットフォームやブラウザを問わず、自分のモバイルデバイスのFIDO認証を利用して、近くにあるデバイス上でアプリケーションやウェブサイトにサインインできます。

1が同期の話、2がHybrid Transportsのお話です。私の記憶では大体の人は1ばっかり注目してましたが、2も含めて考えるとパスキー認証においては(端末の故障、機種変更などにも耐えうる同期の仕組みを備えた)モバイル端末を中心にした運用というスタイルが想定されていたのだろうということですね。ユーザー向けの啓蒙の話に戻ってしまいますが、このようなモバイル端末中心の利用スタイルについても紹介することも重要になってきそうですね。

まとめ

今回はパスキー認証の必須化について、先行実装者が出てきているもののネガティブな反応もそれなりに見られるよという話をしました。 0から1を生み出す難しさは重々承知しているものの、この状況が続くことはエコシステムにおいてよくありません。サービスが嫌われるんじゃなくてパスキーが嫌われてしまうのもなんかアレです。

とはいえ、この状況で必須化に踏み込んだからにはサービスとしても何かしら負けられない戦いがあるのでしょう。 (今回のサービスの意図は知りませんが)例えば使いづらい!っていう怒られが発生したとしてもこれまでフィッシングでやられていた金銭的な被害がガクッと下がるのであればやる価値はあるみたいな判断はありそうです。 今後も必須化の道を切り開いていくのであれば、現状を改善するためにできることをやっていって他のサービスも追従できるようになることを期待しています。

アドカレは続く

これ12/1に出す予定だったので、次回のアドカレは...もう出ています。

qiita.com OAuth/OIDCに関して世界でもトップレベルの有識者である川崎さんの記事、ありがたいですね!ぜひ読みましょう。

ではまた!

SPA+Backend構成なWebアプリへのOIDC適用パターン

ritouです。

マシュマロでSPA+BE構成のWebアプリでOAuthやOIDCしたい!って話をよくいただきます。

最近だと、こんな質問がありました。

OIDCから発行されたトークンの取り扱いについて質問させてください。 SPA +OIDC(認可コードフロー)構成によるWEBアプリケーションの開発を考えています。 idPによる認証後、バックエンドとフロントエンドのAPI通信に使うべきはIDトークンとアクセストークンだとどちらになるのでしょうか?

SPAだろうがMPAだろうがネイティブアプリだろうが、

  • IDToken: RP(Client)がログイン機能に利用するために利用
  • AccessToken: RP(Client)がRSに対してリソースアクセスをする際に利用

という原則は変わりません。これを捻じ曲げるような利用方法をするならば標準化仕様としての話は一旦終わり、後は独自実装としてリスク受容して頑張ってくださいとなります。

ではなぜ最初の質問のような混乱に至るのか、今回はOIDCをどの部分に適用するかという観点で整理すると2つの実装パターンがあります。

1. SPA+BE自体は独自、ID連携する部分にOIDCを適用

まずは普通にSPA+BE構成でアプリケーションを作る場合を考えてみましょう。

ソーシャルログインなどを使わない場合、SPAはBEのログインAPIみたいなのを叩きつつ、ユーザーと対話しつつでログインさせます。

ログイン成功後は、CookieなりSessionTokenなりを用いてBEにアクセスするでしょう。

これ別にOIDC適用しなくても実装できると思います。SPAがユーザー認証を扱う分だけ、この部分にはOIDCを適用しにくいとも言えます。 お好きなフレームワークの枯れた認証機能を使って作ったらいいでしょう。

このようなWebアプリが存在する状態でGoogleログインなどを実装する場合、OIDCのトークンの流れはどうなるでしょうか?

IdPからなんらかの方法でIDTokenとアクセストークンがもらえます。 そして、IDTokenはすぐにBEで検証されてログイン処理に利用されます。

ではAccessTokenはどう使われるかというと、SPAもしくはBEからのリソースアクセスに利用されます。

SNSアカウントの最新のプロフィール情報を取得するぐらいであれば、FEからのリソースアクセスもあり得るでしょう。 決済機能などであればBEからのリソースアクセスとなるでしょう。

IdPからのIDTokenやAccessTokenの基本の使い方はこんな感じです。

整理すると登場人物は

  • IdP, RS: Googleみたいなところ
  • RP(Client): SPA+BE一体化したもの

トークンの用途は

  • IDToken: RP(Client)はログイン処理に利用
  • AccessToken: RP(Client)がRSにリソースアクセスする時に利用

という感じです。

2. BEがRSとなる場合

混乱の原因として考えられるのは、BEがRSとなるケース があるためです。

先ほどと登場人物が結構変わりますね。

  • IdP: Webアプリ
  • RP(Client): IdPとは疎結合になっているWebアプリで、認証状態はSPA単体で管理
  • RS: BEはログイン後のリソースアクセスに利用

SPAはIDTokenを受け取ったら検証して、メタデータなどをセッションに保存しておきます。セッション管理をSPAだけで行うという感じです。 その結果、BEはログインセッションの管理などしなくてもよくて、AccessTokenを受け取ってリソースを返したらOKとなります。 SPAとBEの間のやり取りで使われるのはIdPから受け取ったAccessTokenでしょう。 BEはRSな訳なので、なんとか(JWTやIdPが提供するトークンイントロスペクションエンドポイントを利用)してAccessTokenを検証して適切なリソースを返します。

これどこかでみたことありませんか? SPAがJS SDKの機能を使うだけでログインできて、トークンももらえる。バックエンドはRSとして振る舞う。 まさにAuth0とかのユースケースです。

少し細かいとこ見ちゃうと、OIDCの処理を行った時点ではIdPとステータスが同期するわけですが、それ以降は同期されません。ただ、Webアプリで同期する必要があるケースもあります。グループ企業の名前のついたIDを扱うWebアプリ群でSSO的に振る舞わなければならない場合、定期的にユーザーのログイン状態の同期をかけたり、しれっとユーザーインタラクションのない認証フローを走らせたりするする必要があるわけです。標準化仕様で言うとOpenID Connect Session ManagementとかNative AppだとNative SSOみたいな仕様が使えるわけですが、 Auth0とかは自前でその辺りをよしなにできるようにして自分たちの管理するIdPとのログイン状態の同期を実現している わけです。

まとめ

SPA+BE構成のWebアプリにOIDCを適用する2パターンについて紹介しました。 最初に紹介した質問に対する私の回答は「2つ目を意識して混乱してそうだけどやってることは1っぽいよね。だったらIdPから受け取ったIDTokenもAccessTokenも使わずに自前のセッションでなんとかしたらいいんじゃない?」と言う感じです。

ここまでで紹介した1, 2の実装パターンは どちらもありえる、そんだけだ それぞれ有用なものであり、実際に多く使わているのですが、混ぜるな危険 なわけです。

まずは自分が考えるOIDC適用がどっちなのかを考えてみましょう。そうすれば、実装する内容も決まってきます。

それでも迷ったら質問してください。

marshmallow-qa.com

ではまた。

パスキー認証が突破?不正ログインの「謎」や「不安」を残さない仕組みの必要性

ritouです。

X(旧Twitter)が始まったのが2006年3月21日らしいですね。個人的には 認証、ID連携...もはやID管理における全ての闇をXから教わった と言っても過言ではありません。

今回取り上げるのはこの件です。

www.itmedia.co.jp

  • アカウントが乗っ取られたっぽい
  • 復活した
  • どうしてこうなったか不明

本人の投稿以上の説明がない記事なのでしょうがないと言ってしまえばそれまでなのですが、 この記事を見て「うぉお、なんかこえぇ」「パスキーでもやられるんや」なんて思ってしまうのは、ユーザー認証の今後を考える上で良い傾向ではありません。漠然とした不安というものはその後様々な負の感情につながってしまうものです。

不正ログインの類いが起こった際、考えられる攻撃手段はいくつかあるでしょう。 2FAなど複数の認証手段が利用可能な場合はもっとも楽な方法が狙われるでしょうし、認証のところが固かったらID連携や身元確認の方に目が向くかもしれない、セッションごとのっとる系の場合でも、重要な処理の際はパスワードなりの再認証が入るかもなどといった思考をするのが良いでしょう。ここのところ繰り返しているように、一番脆弱なのは人間なのでアクションをとる部分に注目すべきですね。果たして今回の真相はどうなのでしょうね。

っていう、 探偵ごっこが生まれる状況自体が健全ではない わけです。ユーザーが自分のアカウントに起こったことを把握できないのはどうなんよということですよね。そのためにサービスが何を用意していたら良かったのか、というところで一つだけ強調しておきます。とてもシンプルで ユーザー自体に対するセキュリティイベントの情報をログを保存し、ユーザー自身で確認できるようにする ということです。

  • ログイン/ログアウト/再認証など
  • ログイン方法の変更
  • 連絡先の変更
  • その他ユーザーに関わる重要なアクション

これらのアクションについて、環境やセッション情報などを含んだ状態で保存しておき、ユーザーには出せる範囲で表示してあげる だけでも大分状況が変わってきます。もやは探偵はいりません。

そこそこの規模のID管理を運用していれば、内部でこのようなログを集めて内部の調査やCS対応に利用したりアクセス解析をしたりはしているでしょう。それをユーザーにもちょっとずつ見せてあげたら良いんじゃないと。

今回のような話が出た時、Xでは定期とばかりに5年前の記事を晒しています。

qiita.com

  • セキュリティイベントの保存、表示
  • ログインセッションの管理

この辺はもうID管理標準機能としてデフォルトで用意するぐらいの認識が良いと思います。自分もID管理の機能を作る時はこの辺りまで含めて提案しますし「あって当たり前」の機能なんですよとよく言います。

ユーザー認証やID管理の機能強化は儲からないみたいなことを言う人がいますが、ユーザーに必要な機能を提供できていないことによる信頼失墜などにより失う損失やCS対応まで含めて運用にあたって発生しているコストのことを考えるとこの辺りにリソースを突っ込む価値が認識できるのではないでしょうか。

ID管理はサービスのライフラインなのですから、「あって当たり前」の範囲を広げていくことで不安や謎を残さない仕組みを作っていきましょう。

ではまた。