【おーぷんあいでぃーこねくと】

OpenID Connect とは?

最終更新:
💡 ログインした利用者を、アプリへ伝える

OAuth 2.0を土台に、ログインした利用者をアプリが確認するための認証仕様。IDトークンの役割と検証、認可との違いを解説します。

📌 このページのポイント
OIDC:ログイン結果をアプリへアプリ(RP)① ログインへ案内③ IDトークンを得る提供元(OP)② 利用者を認証認証結果を伝える④ アプリが検証して識別発行元・宛先・期限・署名等IDトークン ≠ API用アクセストークン実社会の本人確認を一律に保証しない
役割の概略で、矢印は通信の全手順ではありません。認可コードの交換等は使うフローに従い、送ったnonceの一致を含む必要な検証を省略しません。
ひよこ ひよこ
外部のアカウントでログインする仕組み?
ペンギン先生 ペンギン先生
そうした連携に使われる仕様だよ。認証を担う提供元が利用者を認証し、その結果をアプリへ伝える。図はその役割を順に示した概略で、実際の通信のすべてではないよ。
ひよこ ひよこ
OAuth 2.0だけでも同じことができる?
ペンギン先生 ペンギン先生
OAuth 2.0の主な目的は、保護された資源へのアクセスを許可すること。OIDCはその上に、ログインした利用者をアプリが確認するための仕組みを加える。認可と認証を区別するんだ。
ひよこ ひよこ
何を受け取って確認するの?
ペンギン先生 ペンギン先生
IDトークンという、認証結果を伝えるJWTだよ。発行元を示すiss、利用者の識別子sub、宛先aud、有効期限exp等を含む。氏名やメールアドレスがいつも入るわけではないんだ。
ひよこ ひよこ
トークンを読めば、ログイン完了?
ペンギン先生 ペンギン先生
読むだけでは不十分だよ。仕様と使うフローに従い、発行元・宛先・期限、署名等を検証する。送ったnonceがある場合は一致も確認する。対応ライブラリを使い、検証を省略しないことが大切だね。
ひよこ ひよこ
身分証明書のように、本名まで保証する?
ペンギン先生 ペンギン先生
提供元で認証された利用者を識別する仕組みで、実社会の本人確認を一律に保証するものではないよ。アプリで利用者を扱う際は、発行元とsubの組み合わせを確認しよう。
もっと詳しく知りたい人へ

IDトークンを、そのままAPIへのアクセスに使う?

IDトークンはアプリが認証結果を確認するためのものです。保護されたAPIへのアクセスには、そのAPI向けのアクセストークンを使います。文字列の見た目が似ていても、宛先と目的が違います。

認証結果は、どのように返ってくる?

代表的なAuthorization Code Flowでは、アプリがまず認可コードを受け取り、トークンエンドポイントで交換してIDトークン等を得ます。図は役割の概略です。実装では利用するフローの手順と検証規則を確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「OpenID Connect」って出てきたら「ログインした利用者を、アプリが確認するための共通の仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「OpenID Connect (OIDC)」 = OAuth 2.0を土台にした認証の仕様
💬 OAuth 2.0で扱うアクセスの許可に、利用者の認証結果を伝えるID層を加えた仕様です。OpenID Providerが認証を担い、結果を受け取るアプリをRelying Partyと呼びます。

参考資料

← 用語集にもどる