MIXI DEVELOPERS
✌️

MIXI MがGoogle/Appleアカウントによるソーシャルログインをサポートしました

2023/12/02に公開

開発本部 MIXI M事業部の ritou です。

本投稿はMIXI DEVELOPERS Advent Calendar 2023 2日目の記事です。

https://qiita.com/advent-calendar/2023/mixi

先日、MIXI Mはパスキーによる認証をサポートしました。

https://zenn.dev/mixi/articles/43068096e7e4dc

それに続き、Google/Appleアカウントを利用したソーシャルログインをサポートしましたので紹介します。

経緯

MIXI Mではサービス開始当初から、デフォルトの認証方法であるSMS/Email OTPを超える安全性と利便性、そして費用面のバランスを実現できる認証方法を検討していました。

パスキーによる認証をサポートしたことにより、安全性、利便性とフィッシング耐性を享受できるようになりました。これまでのようなSMSやメール送信を行わないことにより、送信コストの削減という効果もあります。しかし、非対応環境やクロスプラットフォームでの利用、そしてまだまだパスキー自体の認知度が低いことといった課題は残っています。

一方、ソーシャルログインはコンシューマー系サービスに導入されるようになってから10年以上が経っていることもあり、開発者から見た利用実績やユーザーから見た認知度もそれなりにある認証方法です。認証方法と言いつつも、実際は認証をIdentity Provider(IdP)に任せる仕組みであり、パスキーと同様にMIXI MのSMS送信コストを抑えられます。MIXI Mではこのような特徴を持つソーシャルログインをどのように導入するとユーザーの安全性、利便性を高められるのかを検討しました。

ソーシャルログインに関連する機能

一般的にソーシャルログインと呼ばれる機能としては以下のものがあります。

  • 設定: IdPのアカウントでログインできるようにする、もしくはできないようにする
  • ログイン: IdPのアカウントでログインする
  • 新規登録: IdPのアカウントで新規登録する
  • オフラインの属性情報取得: IdPのアカウントの情報を取得して同期するなど、自サービスで活用する
  • その他APIアクセス: IdPのアカウントに紐づくリソースを活用する

ソーシャルログインを利用したいサービスは、これらの機能の中から必要なものを選択して(場合によっては段階的に)導入するのが一般的です。

MIXI Mの対応

MIXI Mが今回対応した機能は次の2点です。

  • 設定: Google/Appleアカウントとの連携と連携解除
  • ログイン: Google/Appleアカウントを用いたログイン

この対応は、認証方式の拡張を目的としたミニマム実装 と言えます。

それでは、このソーシャルログインの利用方法を紹介します。

Webブラウザで「セキュリティ&ログイン」というページにアクセスすると、ソーシャルログインの設定があります。

設定画面では、Google/Appleアカウントそれぞれの連携状態が表示されます。未連携の場合は連携のためのボタンが表示されます。

「連携する」というボタンを押すと、Googleにリダイレクトします。Googleに未ログイン状態であればログイン画面、ログイン状態なら同意画面(2回目以降はスキップ)、複数のGoogleアカウントでログインしている場合は選択画面となるでしょう。そこから進み、MIXI Mに戻ると連携完了画面が出て、状態が連携済みとなります。
この時、Google/AppleアカウントとMIXI Mアカウントのユーザーの紐付けを行います。

連携解除をする場合は、確認画面を挟んでから未連携に戻ります。

ログイン画面に「他の方法でログインする」と言う項目があり、そこからソーシャルログインのボタンが展開されてそこからログインできます。

Google/Appleでログイン状態となり、MIXI Mに戻ってきたらGoogle/Appleのアカウントと連携しているMIXI Mアカウントでログインできます。未連携状態でソーシャルログインを行なった場合はエラーにしています。

ここで、メールアドレスを用いて紐づけたらシンプルに実装できるのでは? と思われた方は、こちらの記事をご覧ください。

https://zenn.dev/ritou/articles/ca7be3f329e68f

ここからは、なぜIdPとしてGoogle/Appleを選んだのかについて触れます。

Identity Provider(IdP)の選択基準

IdPと呼ばれるソーシャルログインを提供する外部サービスとしては、いくつかあります。

  • Google, Apple, MicrosoftのようなPCやモバイル端末のOSレベルで利用可能なプラットフォーマーと呼ばれるサービス
  • Facebook, X(Twitter)のようなたくさんのユーザーを抱えるSNSを提供するサービス
  • Yahoo! JAPANのように幅広いサービスを提供しているサービスやGitHubのような開発者向けサービス

安全性の面では、プラットフォーマーと呼ばれるサービスの方がMFAやリスクベース認証などを利用して安全性を高めている印象がありますし、後述のようにパスキーの同期にも利用されているアカウントであることから、信頼に足るものであると考えています。

利便性の面でいうと、どれだけログイン状態である可能性が高いか が重要であると考えています。ソーシャルログインのフローにおいて、IdP側のアカウントがログイン状態であれば毎回の認証をスキップできたり、複数のアカウントでログインしていても選択のみで済みます。これによって、ログインにかかる時間を短縮できます。 MIXI MはAndroid/iOSアプリを提供しているので、それぞれのプラットフォームにおいてGoogle/Appleアカウントを利用可能にすることは効果的だと考えました。

ソーシャルログインとパスキーの関係

複数の認証方式を比較検討すると、誰に、どこにセキュリティが依存するかを考慮することがあります。パスキーにおいては、プラットフォームアカウントの同期が可能になった時点で次のような状態になっています。

  • セキュリティキーに保存されるパスキー: セキュリティキーの所持者
  • 他端末に同期されないパスキー: 端末、ブラウザを操作するユーザー
  • Google Password Managerに保存されるパスキー: Googleアカウント
  • iCloud キーチェーンに保存されるパスキー: Appleアカウント
  • その他パスワードマネージャーアプリ: そのアプリのアカウント(やインストール済の端末など)

一般的なユーザーがパスキーを使う際にはモバイル端末を利用し、セキュリティレベルはプラットフォームアカウントに依存するケースが多くなると予想できますし、プラットフォームアカウントもそれを想定しているでしょう。
この点では、Google/Appleアカウントを用いたソーシャルログインとパスキーは同等のセキュリティレベルであると考えられます。

セキュリティレベルが同等であるとして、異なる部分もあります。2023年12月の時点においてApple製品とAndroid端末のようなクロスプラットフォームの環境において、Google/Appleアカウントを用いてパスキーを同期することはできませんが、どちらの環境でもGoogle/Appleアカウントでログインすることはできます。クロスプラットフォーム対応という観点でいうとソーシャルログインの方が有意であると考えることもできます。

このような状況を踏まえ、パスキーによる認証とソーシャルログインの両方をサポートすることで同等のセキュリティレベルを保ちつつそれぞれの特徴を活かした利便性の向上が期待できると考えました。

現状で未対応となる機能について

最初に紹介したパスキー対応の記事で、MIXI Mでは重要なユーザーの操作を保護するため、認証強度を数値化した認証レベルの概念に基づいた再認証を導入したと書きました。

OpenID Connectというプロトコル上ではソーシャルログインを利用するサービスから認証強度などを要求したり、実際に行われた認証方式や認証強度などを受け取るための方法が定義されています。これを利用できれば、IdPの認証強度によってSMS/Email OTPと同等、もしくは高い認証強度として扱うことができます。

しかし、残念ながらGoogle/Appleアカウントとのソーシャルログインではこの仕組みが利用できません。実際の挙動からAppleアカウントは多要素認証を利用していると言えそうですが、Googleアカウントの場合はそう言えないので、現状はどちらもSMS/Email OTPと同等の扱いとしています。

また、ソーシャルログインの機能に、新規登録フローでの活用があります。
IdPから受け取った確認済みのメールアドレスやニックネームを利用し、シームレスな新規登録を実現すると言うものですが、MIXI Mではまだ対応していません。

これらの機能については、厳密なセッション管理の実現や新規登録の負荷を下げられるような形の導入を目指して引き続き検討を進めます。

まとめ

これまでの内容をまとめます。

  • MIXI Mはパスキーに続いてGoogle/Appleアカウントによるソーシャルログインをサポートした
  • 対応の内容としては認証方式の拡張に関するミニマムな実装
  • 安全性、利便性、パスキーとの差異について検討した結果、Google/Appleアカウントの採用となった
  • 認証強度の概念の導入や新規登録フローへの活用については別途検討していく予定

引き続き、MIXI MはID基盤としての機能強化に向けた取り組みを進めていきます。

ではまた。

宣伝

MIXI Mでは本投稿で触れたソーシャルログインなどを機能として持つID基盤以外に、決済基盤についても内製で開発しています。

https://mixi-developers.mixi.co.jp/mm-acs-development-b7f855faac63

現在MIXI Mではサーバエンジニアを採用募集しています。Elixirでの開発や決済基盤、ID基盤の開発に興味がある方は、是非カジュアル面談でお待ちしています。

https://mixigroup-recruit.mixi.co.jp/recruitment-category/career/6071/

MIXI DEVELOPERS
MIXI DEVELOPERS

Discussion