Zenn
🍎

ID連携の導入パターンとMIXI IDの事例

2025/02/10に公開
14

ritouです。

今回は MIXI ID におけるID連携の導入について紹介します。

ID連携とその用途

GoogleやApple, MicrosoftといったプラットフォーマーであったりX, FacebookといったSNSのユーザー情報を用いて別のサービスにログインできる仕組みのことをソーシャルログインと呼ばれています。

これはデジタルアイデンティティの世界においてID連携(Identity Federation)と呼ばれている仕組みの一部です。
Identity Provider(以下IdP)であるサービスのユーザー情報がRelying Party(以下RP)であるサービスに提供され、RPは受け取ったユーザー情報を用いて主に2つの機能を実現できます。

  • 当人認証: 事前にRPは自身のユーザーとIdPの識別子とIdPのユーザー識別子の組み合わせを紐付けておきます。その後、RPがIdPからユーザー情報を受け取ったタイミングで、利用者がIdPの識別子とIdPのユーザー識別子と紐づけられたRPユーザーである とみなします。
  • 身元確認: IdPから受け取った確認済みの属性情報を信用し、自サービス内でも確認済として扱います(例: メールアドレスの確認をスキップ)

このあたりは個人で書いた記事でも説明しています。お時間のある時に読んでください。

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

それでは導入事例を紹介します。

(参考) MIXI Mへの導入: 当人認証の実現

「MIXI M」は、MIXIが開発・運用している基盤システムおよびWALLETサービスです。
MIXI Mでは ユーザーが利用できる安全性の高い認証方式を増やし、何らかの認証方式が使えなくなった際に他の認証方式にフォールバックできる状況 を目指してID連携を導入しました。詳細は一昨年、記事を書きましたのでざっと振り返る程度にします。

https://zenn.dev/mixi/articles/1b8e6cf89f609a

このケースでは ID連携による当人認証の機能を利用 しています。

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

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

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

内部で保持するデータとしては、

  • IdPの識別子: Google or Apple
  • IdPのユーザー識別子

の組み合わせをMIXI Mのユーザー識別子に紐付けます。

ログインのみの利用なので、IdPのメールアドレスやプロフィール情報は利用しません。

ユーザーは、**MIXI Mのソーシャルログインの設定を行うことでログインで利用できます。
言い換えると、ID連携の設定を行わない限りログインできませんし、新規登録を促すこともありません。

MIXI IDへの導入

MIXI IDは、株式会社MIXIが提供するサービス間で利用できる共通アカウントです。
例えば、モンストWebショップ とMIXI IDはそれぞれRPとIdPという立ち位置となっています。

https://webshop.monster-strike.com/

MIXI IDではMIXI Mとは別の導入パターンを選択しました。

  • 当人認証の機能を用いたログイン
  • 身元確認の機能を用いた新規登録
  • メールアドレスが一致する既存ユーザーとの連携機能

それぞれのフローについて簡単に説明します。

連携済みユーザーはログインさせる

ここはMIXI Mと同じです。
事前に "アカウント設定" -> "ログイン・セキュリティ" -> "ソーシャルログイン" にて連携済みとなっている場合は、そのユーザーでログインさせます。

未連携ユーザーのログイン&連携フロー

連携済みのユーザーが存在しない場合でも、GoogleやAppleから受け取ったメールアドレスを利用しているユーザーが存在する場合があります。
この場合、ソーシャルログインを試みた人物と既存ユーザーが同一である可能性が高いと言えます。世の中のサービスでは無条件でこのケースを同一であるとみなして連携させる実装もありますが、あくまで可能性が高いのであって、そうではない可能性もあります。
あるメールアドレスを同一の利用者が使い続けるとは限らないため、属性情報としては普遍的な値として扱ってはいけない、というのがID連携におけるセオリーです。

MIXI IDではソーシャルログインを試みたのがその対象ユーザーであることを確認した上で連携させるフローを用意しています。

次のような状況を考えましょう。

  • MIXI IDにメールアドレスが登録済みのユーザーがいる
  • このユーザーは電話番号、パスキーも登録済み
  • このユーザーはGoogleアカウントと未連携
  • Googleアカウントから提供されるメールアドレスとこのユーザーのメールアドレスが一致

このような状況でソーシャルログインを試みた場合、次のような画面を出して既存ユーザーとの連携を促します。

ここでユーザーが "連携する" を選択すると、対象ユーザーの有効な認証方式を表示します。

SMS、メールアドレスを選択した場合はワンタイムパスワードを用いたログインフロー、パスキーを選択すると対象ユーザーに紐づけられたパスキーでのログインが要求されます。ログイン成功後、Googleアカウントと連携済みとなります。

未連携ユーザーの新規登録フロー

一方、連携済みのユーザーが存在せず、GoogleやAppleから受け取ったメールアドレスを利用しているユーザーも存在しない場合があります。

次のような状況を考えましょう。

  • Googleアカウントと連携済みのユーザーが存在しない
  • Googleアカウントから提供されるメールアドレスが登録されたユーザーが存在しない

この場合は まだMIXI IDを利用したことがない とみなし、Googleから提供されたメールアドレスを用いた新規登録フローに入ります。
このケースも世の中ではしれっと新規登録処理を完了させるサービスが見られますが、MIXI IDでは確認画面を挟みます。

ここから新規登録を行いログイン状態となったユーザーにはGoogleから提供されたメールアドレスが登録済みとなります。

未連携ユーザーの新規登録フロー(2) メールアドレス非公開

ソーシャルログインのフローの中で、AppleアカウントではMIXI IDに対してメールアドレスを公開しない設定が可能であり、その場合はAppleが払い出したメールアドレスが提供されます

https://support.apple.com/ja-jp/105078

このメールアドレスはプライベートメールアドレスと呼ばれています。MIXI IDからこのメールアドレスにメールを送ることでユーザーと連絡を取れますが、MIXI IDとID連携としている他のサービスがこのプライベートメールアドレスを受け取ってもメールを送ることはできません。

MIXI IDでは連携済みのユーザーが存在せずにAppleから受け取ったメールアドレスがプライベートメールアドレスの場合、メールアドレスを登録しない新規登録フローに入ります。

メールアドレスが登録されていないユーザーについて後々困ることはないのかという点については、最初に紹介したモンストWebショップのようなMIXI IDとID連携をしているサービスを利用する際、サービスの要件に応じてフローの中でメールアドレスの登録が要求されます。

おまけ: ログインヒントの活用

Googleアカウントを用いたソーシャルログインでは、ログインヒントという仕組み(OpenID Connect Core 1.0にて定義されているパラメータ)が利用可能です。

Google側の関連ドキュメント

https://developers.google.com/identity/openid-connect/openid-connect?hl=ja#login-hint

アプリが認証しようとしているユーザーを把握している場合は、このパラメータを認証サーバーにヒントとして提供できます。

個人で書いた解説記事

https://zenn.dev/ritou/articles/7f89ae0b084cea

MIXI IDのソーシャルログイン導入においてもこのログインヒントパラメータを利用している部分があります。

次のような状況です。

  • MIXI IDにメールアドレスが登録済みのユーザーがいる
  • そのユーザーはGoogleアカウントと連携済み
  • そのユーザーはAppleアカウントとは未連携
  • Appleアカウントから提供されるメールアドレスとユーザーのメールアドレスが一致

この状態からAppleアカウントでログインしようとすると "未連携ユーザーのログイン&連携フロー" に入ります。

対象ユーザーはGoogleアカウントと連携済みのため、"Googleでログイン" が候補に出てきます。

この画面から "Googleでログイン" が選ばれた際に、連携済みユーザーの識別子をログインヒントとして指定します。

通常のソーシャルログインのフローでは、個人でGoogleを利用しつつ仕事などでGoogle Workspaceも利用しているような場合、Google側でアカウントの選択を要求されます。一方、このログインヒントを受け取ったGoogleは、最初に紹介したドキュメントの通り、ログイン状態に応じて次のような挙動をとります。

このヒントを渡すと、アカウント選択ツールが非表示になり、ログイン フォームのメールボックスが事前入力されるか、適切なセッションが選択されます(ユーザーが複数のログインを使用している場合)。

ざっくり言ってしまうと、ログインヒントで指定したユーザーの情報が返ってくる可能性が高くなるということですね。
MIXI ID側では意図したGoogleアカウントでのソーシャルログインを実現しやすくなる仕組みとしてログインヒントを利用しています。

ちなみに、ログインヒントはMIXI ID内部でも利用していますが、それについては別の機会に紹介できればと思います。

まとめ

身元確認と当人認証という、ID連携で実現できることを整理した上で、MIXI IDへのID連携の導入について紹介しました。
MIXI IDでは単に連携済みのユーザーをログインさせるだけではなく、既存ユーザーとの連携、新規登録というように未連携ユーザーに対するフローを用意しています。
細かいところでは、ID連携の際に対象ユーザーを指定できるログインヒントを使ってUX向上を目指しています。

Google/AppleアカウントとのID連携により、手動のメアド確認が不要な新規登録と複数のログイン方法の設定が一度にできるため、これからMIXI IDを利用される方はぜひお試しいただければと思います。

ではまた。

14
MIXI DEVELOPERS Tech Blog

Discussion

ログインするとコメントできます