OIDCとは
OpenID Connect(OIDC)は、インターネット上でユーザーの ID情報を安全にやり取りするための認証プロトコルです。 OAuth 2.0を基盤としており、シングルサインオン(SSO)などに広く利用されています。SAMLと比較すると、クラウド環境などの 分散型システムや、モバイルアプリ、APIとの連携に優れている点が特徴です。
OAuth 2.0との関係
OIDCは、元々、アクセス制御の仕組みとして普及していた OAuth 2.0を基盤に、ユーザー認証機能を追加して標準化されました。 OAuth 2.0の安全性は既に確立されており、そこに認証機能を組み合わせることで、OIDCはセキュリティ面で非常に強固な仕組みとなっています。 役割としては、OAuth 2.0はアクセスを制御する「認可」を提供し、OIDCはユーザーの本人確認をする「認証」を提供する関係性になっています。 つまり、OIDCは OAuth 2.0の拡張規格として、相互に補完し合うことで、より安全に利便性の高い認証・認可の仕組みを実現しているのです。
OIDCの仕組み
ここでは、OIDCの仕組みを説明していきます。先ずは、登場人物を把握しておきましょう。オンラインサービスを利用したい ユーザー と、サービスを提供する RP (Relying Party)がいます。そして、ユーザーが誰なのかを確認し、サービスの利用権限を判断してくれるのが IdP (Identity Provider、OpenID プロバイダー)と呼ばれます。 CloudGate UNO の場合でいうと、 CloudGate UNO は IdPとなり、 CloudGate UNO に連携する OIDCサービスは RPになります。
- アクセススタート: ユーザーがサービス(RP)へのアクセスを試みます。
- 認証リクエスト(リダイレクト): RPはユーザーの認証を IdPに委ねていますので、IdPに対して認証リクエストを行います。
- サインオン操作: IdPはユーザーへサインオン操作を促します。
- 認証情報の入力: ユーザーが認証情報を入力します。(例:IDとパスワードなど)
- 認可コード(リダイレクト): ユーザー認証に成功すると、IdPは RPに対して一時的なコードである認可コードを発行します。 この認可コードは、ユーザーのブラウザーを経由して、RPの指定されたリダイレクトURLに送られます。
- トークンリクエスト: RPは受け取った認可コードと、あらかじめ IdPとの間で共有していたクライアントシークレットを IdPの エンドポイントへ送り、トークンリクエストを行います。
- アクセストークン・IDトークン: IdPはリクエストを検証し、RPに対してアクセストークンと IDトークンを発行します。IDトークンは、 ユーザーの認証情報を JSON形式で格納したもので、公開鍵暗号化方式により署名されており、改ざんの検知が可能です。 IDトークンに含まれるユーザー情報はクレーム(Claim)と呼ばれ、ユーザー名やメールアドレスなどの基本的な情報が含まれています。
- サービススタート: RPは IDトークンを検証し、サービスの提供を開始します。
OIDCのメリット
OIDCを利用すると、ユーザーは1度の認証で複数のサービスへ安全にアクセスできるシングルサインオン(SSO)を体現できます。 またサービス側は認証プロセスを IdPに委ねられることで開発の負担を軽減し、セキュリティリスクを低減することができます。 さらに、標準化されたプロトコルである OIDCは、異なるシステム間での連携を容易にしており、安全で効率的な認証システムの構築を実現することができます。