OAuthは認可の仕組みであり、認証の仕組みではありません。
OpenID Connect(OIDC)はOAuthを基盤とし、ユーザー認証に可能なIDトークンを加えた認証プロトコルです。
この記事では、「OAuthではなぜ認証ができないのか」
そして 「OIDCはそれをどう解決したのか」 を図と表で整理します。
🪶 想定読者
- OAuthとOIDCの違いを明確に理解したい方
- 「認可」と「認証」の違いを整理したい方
- IDトークンやアイデンティティプロバイダの役割を理解したい方
🖼️ 背景
OAuthが認証の仕組みではないということは理解しています。
OIDCがどのようにOAuthを基盤として認証プロトコルを構築しているのかは理解できていませんでした。
この記事の内容は、以下の書籍を主な参考にしています。
💡 OpenID Connect(OIDC)ができた背景
リソース所有者:ユーザー本人
保護対象リソース:ユーザーのデータを持っているサービス
認可サーバーとは:
保護対象リソースに信頼されているサーバー
保護対象リソースへ制限したアクセスをする為のクレデンシャル(アクセストークン)をクライアントに発行する
クライアント:ユーザーのデータ(リソース)を使いたいアプリのこと
OAuthは認可の仕組みであり、認証の仕組みではありません。
認可サーバーから発行されるアクセストークンでは認証で確認すべき以下が確認できません。
- リソース所有者が誰であるか
- そのクライアントに存在するのか
アクセストークンは保護対象リソースのAPIにアクセスする為のものです。
OAuthに認証のための情報伝達を追加し、ログイン処理を可能にしたのがOpenID Connect(OIDC)です。
次にOIDCの構成要素を説明します。
📊 アイデンティティプロバイダを用いて認証を行う仕組み
OIDCはアイデンティティプロバイダを用いた認証の仕組みです。まずその仕組みを簡単に説明をします。
アイデンティティプロバイダ(IdP)とは
ユーザーのIDや認証情報を管理し、 ユーザーの本人確認を行う
リライングパーティとは
ユーザーの認証をアイデンティティプロバイダの結果を持って認証したと見なす
以下が認証でアイデンティティプロバイダを用いて認証を行う仕組みの図です。
これを利用した技術としてOIDC以外にSAMLがあります。
次にOIDCによる認証の仕組みを説明します。
🚧 OAuthの構成要素からOIDCを構築する
アイデンティプロバイダによる認証の仕組みを構築する為に
OAuthの構成要素を以下のように当てはめます。
| アイデンティティプロバイダによる認証の仕組み | OAuth |
|---|---|
| ユーザー | リソース所有者 |
| アイデンティティプロバイダ | 認可サーバー + 保護対象リソース |
| リライングパーティ | クライアント |
OAuthを拡張し、認可サーバーで認可された後に取得できる情報をユーザーの認証に関する情報とすることでユーザーのログインに必要なものをクライアントに渡すことができます。
これにより、OAuthから認証プロトコルが構築できました。
認可サーバーで認可された後に取得できる情報はIDトークンと呼ばれます。
次にIDトークンについて説明します。
👤 IDトークン
IDトークンはリライングパーティ(クライアント)の認証の為に使われるので、リライングパーティによって解析可能なものです。
リライングパーティは、IDトークンが信頼されるアイデンティティプロバイダから発行されていることを確認し、問題なければユーザーの認証が完了します。
📚 参考
