OpenID 対 OAuth
July 3, 2024
ユーザー情報のセキュリティを確保し、サードパーティアプリケーションが制限されたリソースにアクセスできるようにするために、2つの主流技術が登場しました:OpenID ConnectとOAuthです。これら2つはしばしば一緒に議論されますが、機能的ポジショニングと中核的な目的において根本的に異なります。
具体的には、OAuthは認可フレームワークの構築に焦点を当てており、その中核的な目的は、サードパーティアプリケーションに特定のリソースへのアクセス許可を与えることであり、ユーザーの身元確認には直接関与しません。一方、OpenID Connectは、まさに身元認証サービスとして位置づけられており、OAuthが身元認識の領域で持つギャップを埋め、ユーザーの身元の真正性と信頼性を確保します。
このブログでは、OpenID ConnectとOAuthの本質、動作メカニズム、典型的なアプリケーションシナリオ、そして両者の微妙で密接な関係について深く掘り下げます。
OpenID Connectとは何か?
OpenID Connect (OIDC)は、OAuth 2.0フレームワークに基づく認証プロトコルであり、IDトークンの概念を導入することでOAuthの機能を拡張しています。OIDCは、ユーザーがサードパーティアプリケーションにリソースへのアクセスを許可するだけでなく、ユーザーの身元情報の検証も提供し、単一のログイン資格情報を使用して複数のサービスに安全にアクセスできるようにします。
OAuth 2.0と比較して、OIDCの中核的な違いは認証層が追加された点にあります。OAuth 2.0は主に認可に焦点を当てており、ユーザーがサードパーティアプリケーションのリソースへのアクセス許可を制御できるようにしますが、ユーザーの身元の具体的な検証には関与しません。
OpenID Connectの認証プロセス:
-
アプリケーションへのアクセス: ユーザーがアプリケーションやサービスを使用したい場合、アプリケーションがユーザーの身元を確認する必要がある場合、ユーザーは身元認証サービスプロバイダーであるOpenID Connectプロバイダー(OP)にリダイレクトされます。
-
ユーザーログイン: ユーザーはOPのログインインターフェースでユーザー名とパスワード(またはOPがサポートする他の認証メカニズム)を入力します。ユーザーがログインに成功すると、OpenID Connectプロバイダーはユーザーの身元を確認します。
-
IDトークンの発行: ユーザーの身元が確認されると、OpenID ConnectプロバイダーはIDトークンと呼ばれる特別なトークンを生成します。このトークンにはユーザーの身元情報(ユーザー名、メールアドレスなど)が含まれており、ユーザーの身元のデジタル表現と伝達を保証します。
-
IDトークンの使用: IDトークンを取得したユーザーは、以前にアクセスしたいと思っていたアプリケーションにそれを提示できます。アプリケーションはトークンを確認し、信頼できるOpenID Connectプロバイダーによって発行され、有効期限が切れていないことを確認します。
-
アプリケーションへのアクセス: アプリケーションがIDトークンの有効性を確認すると、ユーザーは保護されたリソースやサービスにアクセスできるようになります。これにより、ユーザーは各アプリケーションに個別に登録してログインする必要がなく、OpenID Connectプロバイダーによって発行されたIDトークンを使用できます。
-
セキュリティ保証: OpenID Connectは、高度なJSON Web Token (JWT)技術を使用してトークンを生成および検証し、データの改ざんや盗難のリスクを効果的に軽減します。さらに、OpenID Connectは、認証コードモード、暗黙的モード、ハイブリッドモードなど、さまざまな認証および認可モードを柔軟にサポートし、異なるシナリオのセキュリティ要件に適応します。
OAuthとは何か?
簡単に言えば、OAuthは、サードパーティアプリケーションが別のサービスに保存されているユーザーの機密リソース(写真ライブラリ、連絡先リストなど)にアクセスできるようにするプロトコルであり、ユーザーのログイン資格情報(ユーザー名とパスワード)を直接アクセスすることなく行います。このメカニズムは「認証」ではなく「認可」に重点を置いています。
例えば、Googleアカウントを使用してニュースアプリにログインしたい場合、アプリはOAuthを使用してGoogleアカウントから公開情報(アバターやニックネームなど)をリクエストできますが、ニュースアプリに直接Googleアカウントのユーザー名とパスワードを提供する必要はありません。
OAuthの認可プロセス:
-
ユーザーが認可をリクエスト: ソーシャルアプリケーションを使用していて、別のソーシャルネットワークのアカウント情報にアクセスしたいとします。しかし、この情報は保護されているため、認可が必要です。
-
認可サーバーへのリダイレクト: サードパーティアプリケーションは、リクエストを認可サーバーのページにリダイレクトします。このページでは、通常、認可したいサービスにログインするように求められます。
-
ユーザーログインと認可: 認可サーバーのページで、アカウントでログインする必要があります。ログイン後、ページはサードパーティアプリケーションに情報へのアクセスを許可するかどうかを尋ねます。
-
認可サーバーがアクセストークンを発行: 許可すると、認可サーバーはアクセストークンと呼ばれる特別な「パス」を生成します。このトークンは一時的な入場パスのようなもので、サードパーティアプリケーションが一定期間情報にアクセスできるようにします。
-
サードパーティアプリケーションがアクセストークンを使用: サードパーティアプリケーションがアクセストークンを取得すると、このトークンを使用して一定期間情報をリクエストできます。リクエストするたびに、このトークンを提示して認可されていることを証明する必要があります。
-
認可サーバーがトークンを検証し、リソースを返す: サードパーティアプリケーションが情報を保存している認可サーバーにアクセストークンを提示すると、認可サーバーはトークンが有効かどうかを確認します。有効であれば、トークンの権限に基づいてサードパーティアプリケーションに対応する情報へのアクセスを許可します。
OAuthのアプローチを採用することで、ユーザーアカウントのセキュリティが大幅に向上し、サードパーティアプリケーションに直接ユーザー名とパスワードを明かす必要がなくなります。また、柔軟な認可メカニズムを提供し、どのアプリケーションがどの情報にアクセスできるかをユーザーが独立して決定できるため、個人情報の流れを正確に制御できます。
OpenID ConnectとOAuthの違いと関連性
OpenID ConnectとOAuthの違いと関連性は、実際のアプリケーションで特に鮮明に現れます。例えば、「ペットパラダイス」というオンラインペットサイトがあり、顧客がペット用品を購入できるとします。また、ペットストアはペットの健康追跡アプリも提供しており、顧客はペットの体重、食事、ワクチン接種状況などの健康データを記録できます。
このユースケースにおけるOpenID Connectの適用:
-
認証: 顧客が初めて「ペットパラダイス」のウェブサイトを訪問したり、ペット健康追跡アプリをダウンロードして使用したりする際、登録とログインが必要です。便利なログイン体験を提供するため、ペットストアはOpenID Connectを使用してシングルサインオン(SSO)を実装することを決定します。
-
IDトークン: 顧客は、OpenID Connectをサポートする他のサービス(ソーシャルメディアアカウントなど)の資格情報を使用してログインできます。ログインが成功すると、OpenID Connectプロバイダーは顧客にIDトークンを発行します。このトークンには顧客の身元情報が含まれており、暗号化および署名されています。
-
クロスサービス認証: 顧客が後でペットストアの他のサービス(ウェブサイトからアプリなど)を訪問する場合、以前に取得したIDトークンを使用して認証できます。これにより、顧客は異なるサービス間でシームレスに切り替えることができます。
このユースケースにおけるOAuthの適用:
-
サードパーティアプリケーションの認可: 「ペットパラダイス」が「ペットダイアリー」というサードパーティアプリケーションと協力し、顧客が「ペットパラダイス」からペット用品の購入記録とペットの健康データを「ペットダイアリー」に同期できるようにしたいとします。
-
アクセストークン: この機能を実現するため、「ペットパラダイス」はOAuthを使用して「ペットダイアリー」アプリケーションに顧客のデータへのアクセスを認可します。顧客が「ペットパラダイス」のウェブサイトで認可に同意すると、OAuthフローを通じてアクセストークンが生成され、「ペットダイアリー」アプリケーションが「ペットパラダイス」上の顧客の特定のデータにアクセスできるようになります。
-
ユーザーデータの保護: OAuthを通じて、顧客のログイン資格情報(ユーザー名とパスワード)は「ペットダイアリー」アプリケーションに直接公開されず、アクセストークンを通じて安全に共有されます。これにより、「ペットダイアリー」アプリケーションが攻撃されても、攻撃者は顧客のログイン資格情報を直接取得できません。
まとめ
まとめると、OAuthとOpenID Connectの違いと関連性は以下のように要約できます。
-
基盤と拡張:
- OAuthは認可フレームワークであり、ユーザーのユーザー名とパスワードを使用せずにサードパーティアプリケーションが限定的なアクセス許可を取得できるようにします。
- OpenID Connectは、OAuth 2.0の基盤の上に構築され、認証層を追加することでその機能を拡張します。
-
トークンと認証:
- OAuthでは、主に認可に焦点が当てられており、アプリケーションがユーザーのリソースにアクセスできるようにします。一方、OpenID Connectは認証に重点を置いており、ユーザーの身元を確認します。
- OpenID ConnectはIDトークンの概念を導入します。これはユーザーの身元情報を含むJSON Web Token (JWT)であり、ユーザーの身元を証明するだけでなく、ユーザーの個人プロファイル情報を含むこともできます。
-
協力:
- アプリケーションがユーザーの身元を確認し、ユーザーのリソースにアクセスする必要がある場合、OpenID ConnectとOAuthは協力して動作できます。
- ユーザーはまずOpenID Connectを通じて身元を認証し、IDトークンを取得します。その後、アプリケーションはこのトークンとOAuthフローを使用してユーザーのリソースへのアクセス許可を取得できます。
まとめると、OpenID ConnectとOAuthは2つの補完的な身元認証および認可プロトコルであり、現代のウェブおよびモバイルアプリケーションに安全で柔軟かつユーザーフレンドリーな認証および認可ソリューションを提供します。