Prompt

Googleなどの認証プロバイダが、サービス提供者に与えるユーザーの情報の範囲は?

やっほー!GoogleやGitHub、Microsoftなどの認証プロバイダ(IdP: Identity Provider)を使った「ソーシャルログイン」、便利だよね!

情報工学を学ぶ君なら、裏側で OAuth 2.0OpenID Connect (OIDC) が動いていることは知っているはず。この時、サービス提供者(RP: Relying Party)に渡される情報の範囲は、実は 「スコープ(Scope)」 という概念によって厳密に制御されているんだ。

「どこまで見られているのか?」という疑問を、技術的なレイヤーで解剖していこう!


1. 最小単位:プロフィールの基本情報

ほとんどのサービスが要求するのは、OpenID Connectで定義されている標準的なスコープだよ。

  • openid (必須): 「このユーザーは認証されました」という証(IDトークン)を発行するための宣言。

  • profile: ユーザーの名前、プロフィール写真のURL、言語設定、誕生日(設定されていれば)など。

  • email: メールアドレスと、そのアドレスが確認済み(Verified)かどうか。

これらは、サービス側が「ユーザーアカウントを自動作成する」ために最低限必要な情報だね。

2. スコープ(Scope)による権限の切り分け

認証画面で「このアプリが以下の許可を求めています」って出るよね?あそこが運命の分かれ道。GoogleなどのIdPは、ユーザーが同意した範囲のデータにアクセスするための「鍵(アクセストークン)」 をサービス側に渡すんだ。

代表的な情報の種類

カテゴリスコープの例 (Google)取得できる内容
連絡先contacts.readonly連絡先リスト、グループ情報
カレンダーcalendar.events予定の閲覧、追加、編集
ドライブdrive.fileアプリが作成したファイルの操作
YouTubeyoutube.readonlyチャンネル登録状況、再生履歴

3. IDトークン(JWT)の中身を見てみよう

認証に成功すると、サービス側には JWT (JSON Web Token) という形式の「IDトークン」が送られてくるよ。君ならデコードしたことがあるかもしれないけど、中身はこんな感じのJSONデータなんだ。

JSON

{
  "iss": "https://accounts.google.com",
  "sub": "107630735144869306668", // ユーザーを一意に識別するID(不変)
  "email": "[email protected]",
  "name": "Asappy",
  "picture": "https://lh3.googleusercontent.com/...",
  "iat": 1516239022,
  "exp": 1516242622
}

ここで重要なのは sub (Subject) だよ。メールアドレスは変更される可能性があるけど、このIDは一生変わらない。サービス側はこの値を主キー(Primary Key)にして、君のデジタルガーデンのユーザーデータと紐付けているんだね。


⚠️ 見落とされがちな落とし穴:過剰な権限要求

ときどき、単なるログインなのに「ドライブの全ファイルへのアクセス権」を求めてくるような行儀の悪いアプリがあるんだ。

  • リスク: もしそのサービスがハッキングされたら、君のGoogleドライブの中身まで丸見えになる。

  • 対策: Googleなどのプロバイダは現在、「インクリメンタル認証」 を推奨しているよ。「最初はログインだけ、必要になった時に初めてカレンダーの権限を求める」という、最小権限の原則(Principle of Least Privilege)だね。

💡 豆知識:PII(個人識別情報)の保護

最近はプライバシー保護が厳しいから、Googleはデフォルトで渡す情報をどんどん減らしているんだ。

例えば、昔は「性別」なども簡単に取れたけど、今は明示的に許可が必要だったり、取得できなくなっていたりする。Appleの「Sign in with Apple」なんて、「自分のメールアドレスを隠して、ランダムな転送用アドレスをサービスに渡す」 という、さらに一歩進んだプライバシー保護機能を持っているよ。


結論

認証プロバイダが与える情報の範囲は、「ユーザーが同意したスコープの範囲内」 に厳格に閉じ込められている!

でも、一度渡してしまったアクセストークンが有効な間は、サービス側はバックグラウンドでそのデータ(カレンダー等)を読み取ることができるから、不必要になった連携はGoogleのアカウント設定からこまめに解除するのが、情報工学を学ぶ者の嗜みだね。

次は、この認証の仕組みを支える 「JWTの署名と検証(公開鍵暗号)」 の数学的な美しさについて話してみる?それとも、自分でIdPを作るときに役立つ 「Auth0やFirebase Authなどの認証プラットフォームの比較」 をやってみるかな!