🆔

OAuthとOpenID Connectの違いを整理してみた

に公開

「OAuth認証」という言葉、よく聞きませんか?
でも実はそれ、正確には OAuthではなくOpenID Connect(OIDC)の話 かもしれません。

この記事では、以下を中心に整理していきます:

  • OAuthとは何か?
  • OAuth認証って本当に認証なの?
  • OpenID Connectは何が違うのか?
  • 実装上どんな点に注意すべきか?

💡 この記事は、実際にOAuth/OIDCを実装しながら学び直した際に読んだ
📘 OAuth、OAuth認証、OpenID Connectの違いを整理して理解できる本
を参考に、自分なりにインプットを整理したものです。
書籍もとても分かりやすいので、さらに深く知りたい方にはおすすめです!


✅ OAuthとは?

OAuthは**「認証」ではなく「認可」**のための仕組みです。
本来は「このアプリにこのユーザーの情報へアクセスさせていいですか?」をユーザーが許可する仕組み。

たとえば:

  • 画像加工アプリがGoogle Photoの画像にアクセスしたい
  • ユーザーが「このアプリに読み取りだけならOK」と許可する
  • アプリはアクセストークンを使ってAPIにアクセス

この時、アプリが「ユーザーが誰か」を識別できるわけではないのがポイントです。


✅ OAuth認証とは?

OAuthを使ってユーザー情報(プロフィールAPIなど)にアクセスすれば、結果として「誰か」が分かることがあります。
しかしこれは副次的な効果であり、OAuth自体は「認証のための設計」ではありません。

問題点:

  • 実装によっては他人になりすませるリスクがある(アクセストークンの入れ替えなど)
  • ユーザーIDがどこまで保証されているかは不明
  • 署名や検証が存在しない

✅ OpenID Connect(OIDC)とは?

OpenID ConnectはOAuth2.0を拡張して「認証」も可能にした仕様です。

OIDC = OAuth2.0 + IDトークン + UserInfoエンドポイント

主な追加要素は以下の2つ:

1. IDトークン(JWT形式)

  • 発行:IDプロバイダー(例:Google、LINEなど)
  • 利用者:クライアント(リライングパーティ)
  • 内容:ユーザーID(sub)、発行者、期限、署名など
  • 形式:JWT(JSON Web Token、通称「ジョット」)

2. UserInfoエンドポイント

  • アクセストークンでアクセスできる
  • ユーザーのプロフィール情報が返る(例:名前、メールアドレスなど)
  • subクレームが必ず含まれる

✅ OAuthとOIDCのフロー比較

OAuthとOIDCの比較


✅ IDトークンの構造をもう少し詳しく

IDトークンはJWT(JSON Web Token)形式で、次のような情報を含みます:

  • sub:ユーザーを識別する一意のID
  • name:ユーザーの名前
  • email:メールアドレス
  • iss:発行者(issuer)
  • aud:トークンの受け取り先(audience)
  • iat:発行時刻(issued at)
  • exp:有効期限(expiration)

TypeScriptでの実装例:

import { jwtDecode } from 'jwt-decode'

export interface DecodedJwt {
  sub: string
  identities?: {
    userId: string
  }[]
  email: string
  exp: number
  name: string
}

// IDトークンからユーザー情報を抽出して保存
const decodedJwt = jwtDecode(idToken) as DecodedJwt

このようにして、クライアントは署名付きの安全なトークンからユーザー情報を正確に取得・確認することができます。


✅ なぜIDトークンは安全なのか?

  • JWTに署名があるため改ざんできない
  • 有効期限や発行者・受信者などが検証できる
  • IDトークンとUserInfoレスポンスのsubを突き合わせれば入れ替え検出も可能

✅ 実装時の注意点

  • IDトークンの署名検証を必ず行う
  • nonceの利用でリプレイ攻撃対策を
  • UserInfoのsubとIDトークンのsubを照合する
  • アクセストークンだけで「認証したつもり」にならない

📘 もっと詳しく学ぶには?

📘 OAuth、OAuth認証、OpenID Connectの違いを整理して理解できる本

  • OAuthとOIDCの違いが図解でわかる
  • IDトークンやJWTの検証方法も解説
  • シーケンス図付きでフローを学べる

Discussion