Firebase Authentication 学習記録
一時中断していた学習を再開する。以下の書籍を読み進めていく。
まとめ
TODO: 記載する。
ソーシャルログインとは何か
LINE ・ Twitter などの SNS アカウントを使ってアプリを新規利用・ログインする手法。自身のアプリに独自のユーザー認証機能を用意するのではなく、前述の SNS に代表されるサービスにユーザー認証を肩代わりしてもらう。認証されたら自身のアプリから任意のタイミングでSNSサービスからアイデンティティ情報が取得できる。
導入メリットとして、利用者目線では新しいパスワードが不要になったり、初期登録の手間が軽減する。開発者目線では、ユーザー認証の独自実装が不要になったり、 IdP が対応している 2要素認証や FIDO 認証などの高度な認証方法を利用できたり、初期登録の手間が軽減することによる登録時の離脱率を低減できる。
また、ソーシャルログインをそのまま導入する場合、SNS 毎の実装の違いに対応しないといけない。 Firebase Authentication のような IDaaS を用いることで、実装ミスのリスクや実装コストを下げてソーシャルログイン機能を提供することができる。
現在 Firebase Authentication で利用可能な IdP は 以下。
ID ライフサイクルについて( 未登録、仮登録、本登録、一時凍結、退会など)
ソーシャルログイン機能の洗い出し(ログイン、ログアウト、リカバリーなど)
リポジトリ。どこまでやったか覚えていないので、最初からなぞっていく。
ゴール
- ソーシャルログインとは何か理解する。
- 未登録、仮登録、本登録、一時凍結、退会などの ID ライフサイクルを理解する。
- ログイン、ログアウト、リカバリーなどのソーシャルログイン機能を洗い出す。
ソーシャルログイン = SNSアカウントを使って アプリを新規利用・ログインする方法。
Firebase Authentication のような IDaaS を用いると、1から実装するのが困難な ソーシャルログインを手軽に利用でき、実装ミスなどの脆弱性リスクを回避できる。
はじめに 読む
IDaaS ( IDentity as a Service )。
SNS ( Twitter, Instagram, GitHub ) などが IdP ( ID プロバイダ ) として実装難易度の高いユーザー認証を肩代わりしてくれるおかげで、2段階認証などの高度な認証方式をアプリに組み込める。
現在 Firebase Authentication で利用可能な IdP は 以下。
Firebase Authentication と IdP がごっちゃになりそうなので、
Twitter や Facebook のアカウントを利用して新規登録やログインができるのは、 Twitter や Facebook がユーザーのID情報を持っているから。ID を プロバイド(提供)するサービスを IdP と呼ぶ。
しかし、 IdP を用いた認証の実装は難易度が高いので、これらの実装を肩代わりしてくれるサービスが存在する。その一つが、Firebase Authentication である。(IDaaS)
整理すると、
- レベル1. 独自のユーザー認証機能の提供
- 独自でユーザー認証機能を提供するのは面倒臭いなぁ...
- そや、Twitter とか Facebook に「ユーザー認証」を肩代わりしてもらお!
- レベル2. IdPを利用したユーザー認証(ソーシャルログイン)機能の提供
- ソーシャルログインを Twitter とか Facebook とかそれぞれ対応するの面倒臭いなぁ...
- そや、Firebase Authentication に「ソーシャルログイン」を肩代わりしてもらお!
- レベル3. IDaaS を用いた簡単なソーシャルログイン機能の提供
ソーシャルログイン機能について、IdP を直接用いる実装をせず、IDaaS に任せると簡単に組み込める。
Chap1 IDaaS を使ったソーシャルログイン 読む
パスワード認証の課題と対策
-
パスワードの失念
- ログインできないユーザーが発生する
- リカバリ機能(ログインできる状態に戻す機能)の提供
-
パスワードの使い回し
- 流出した ID と パスワードの組み合わせで攻撃される (パスワードリスト攻撃)
- パスワード以外の認証も含めれば良い
- 2要素認証(所有、知識、整体のうち2つを確認する)機能の提供
-
推測しやすいパスワード
- 流出した ID 複数に対して推測しやすい同じパスワードで攻撃する ( パスワードスプレー攻撃)
- 2要素認証(所有、知識、整体のうち2つを確認する)機能の提供
-
同じユーザーに対して連続で試す攻撃する(ブルートフォース攻撃や辞書攻撃)
-
一定回数ログイン失敗でログイン禁止にする機能の提供(2要素認証でも対策できる)
2要素認証とは
認証には「知識」「所有」「生体」の3要素がある。いずれか2つの要素を組み合わせて認証する。
- 知識要素 ... パスワードや暗証番号
- 所有要素 ... メールやSMSを受け取れる端末やICカード
- 生体要素 ... 指紋や顔や網膜
パスワード認証の課題と対策
-
パスワードの失念
- ログインできないユーザーが発生する
- リカバリ機能(ログインできる状態に戻す機能)の提供
-
パスワードの使い回し
- 流出した ID と パスワードの組み合わせで攻撃される (パスワードリスト攻撃)
- パスワード以外の認証も含めれば良い
- 2要素認証(所有、知識、整体のうち2つを確認する)機能の提供
-
推測しやすいパスワード
- 流出した ID 複数に対して推測しやすい同じパスワードで攻撃する ( パスワードスプレー攻撃)
- 2要素認証(所有、知識、整体のうち2つを確認する)機能の提供
-
同じユーザーに対して連続で試す攻撃する(ブルートフォース攻撃や辞書攻撃)
- 一定回数ログイン失敗でログイン禁止にする機能の提供(2要素認証でも対策できる)
-
偽のURLから偽サイトに誘導する攻撃(フィッシング攻撃)
- 2要素認証でも防げない
- ユーザーが偽サイトに入力した内容を正規のサイトに送り、正規のサイトからの応答はユーザーに送られる為。
- URLをチェックするしか、パスワード認証では対応できない。
- 2要素認証でも防げない
2要素認証とは
認証には「知識」「所有」「生体」の3要素がある。いずれか2つの要素を組み合わせて認証する。
- 知識要素 ... パスワードや暗証番号
- 所有要素 ... メールやSMSを受け取れる端末やICカード
- 生体要素 ... 指紋や顔や網膜
FIDO認証
フィッシング攻撃の対策には、パスワード認証の代わりにFIDO認証を用いると良い。
- 脱パスワード認証
- ユーザーとサーバーで秘密の情報を共有しない
- 指紋認証などで認証した後、認証機が origin(≒WebサイトのURL)に紐付けた秘密鍵を生成するので、人によるURLのミスが発生しない。
- リカバリの為には認証器が2つ必要。代わりのパスワード認証などを設けるとそこが脆弱に。
この前、SBI のアプリが導入してたのを見た。
パスワード認証は単純に実装するだけでは脆弱なので、リカバリー、2要素認証、FIDOといったものを視野に入れる必要がある。一方で、本来アプリが提供したい価値とは直接関係ないので、開発コストをかけるのが難しい。
個人的には、サービスの内容によると思う。BtoBの限られた人しかアクセスしないようなクローズドなサービスならここまでする必要はなさそう。(例えば、リカバリ機能は設けずメールで受け付けるなど)。どこまでの脆弱性対策をするのかは、工数とのトレードオフ。
著者の別の本を購入
早く読み終えてステッカー貼りたい。
このスクラップは、引き続き「firebase authenticationで学ぶ ソーシャルログイン入門 id管理の原則にそった実装のベストプラクティス」を進めていく。
アプリに対してソーシャルログインを提供するサービスのことをアイデンティティプロバイダ(IdP: Identity Provider) と呼ぶ。
IdP 例として、 Google、 GitHub, Facebook, Twitter, Apple, Microsoft, Amazon, LINE, Yahoo! など。
ソーシャルログイン、すなわち「IdPがユーザー認証&ユーザーの属性情報の提供を行う」方法について、IdP によって仕組みはさまざまである。 OpenID Connect に沿うもの、 認可フレームワークで情報をやり取りするもの、独自仕様のものなど。
仕組みは違えど、それらを一括で「ソーシャルログイン」と呼称する。
ソーシャルログインするといつでもユーザー名やプロフィール画像などの属性情報( アイデンティティ、ID) を IdP から取得できるので、情報の活用という意味合いが強い場合はアイデンティティ連携( ID 連携 ) と呼ぶことも。アイデンティティ連携を受けるアプリのことをリライングパーティ( Relying Party ) と呼ぶ。
Relying ... 依存する
IDについて
IdP や ID連携 という文脈での ID は IDentity の略。ユーザーの属性情報、例えば「名前」「住所」「メールアドレス」「ユーザー識別子」「パスワード」など。
対して、ユーザーIDやクライアントIDなどの ID は Identifier の略。識別子の意味。
ソーシャルログイン メリット
- 利用者目線では、新しいパスワードが不要になったり、初期登録の手間が軽減すること。
- 開発者目線では、ユーザー認証の独自実装が不要になったり、 IdP が対応している 2要素認証や FIDO 認証などの高度な認証方法を利用できたり、初期登録の手間が軽減することによる登録時の離脱率を低減できること。