OIDC(OpenID Connect)

OIDCとは

OIDC(OpenID Connect)とは、OAuthの後発として、ユーザー情報照会APIのためのトークンを安全に渡すための仕組みです。

OAuthとは、ユーザー情報などのAPIを呼び出すためのアクセストークンを安全に渡たしてもらう方法でした。その発展系として、ユーザー情報をいかにしてもらうのかという照会まわりを整備した規格になります。

  • 識別連携方法として、IDトークンを整備
  • 最新ユーザー情報取得方法として、UserInfo APIの整備

OIDCはOAuthの仕様から見ると拡張の関係性にあります。したがって、OAuthでできることはOIDCでもだいたいできる、と覚えておきましょう。

OAuthとOIDCで呼び方は違う

OAuthとOIDCでは登場人物は同じですが、呼び方が異なります。

OAuth OIDC 意味
リソースオーナー
エンドユーザー
実際のユーザー様(あなた)
クライアント
リライングパーティ(RP)
トークンからユーザー情報を取得する側
認可サーバ
IDプロバイダー
トークンを発行・管理する側
リソースサーバー
Userinfoエンドポイント
ユーザー情報を照会するAPI
グラント
フロー
環境ごとのトークンの渡し方

識別情報を送るIDトークン

IDトークンとは、ユーザーを識別できる情報(ID)を含んだトークンのことです。フローによりますが、アクセストークンとセットで渡されます。ID トークンは JSON Web キートークン (JWT) という形式をとっており、ヘッダー+ペイロード+署名からなります。

ヘッダーと署名はペイロードが破損・改ざんしていないことを確認するための情報になります。ペーロードには、識別情報と認可コードのハッシュ値、アクセストークンのハッシュ値などの情報が含まれています。(IDトークン内のペーロード内の)識別情報とは、一般的には識別子情報(sub)やメールアドレス、名前など長期的に変更されないと考えられる情報が含まれます。IDトークンでユーザー情報を渡すならアクセストークンは必要ない?感じもしますが、IDトークンは長期的あるいは永続的に変更するに必要のない識別情報としてアカウント登録やログインやアクセス制御に利用し、アクセストークンはシステム自身が好きなタイミングでリソースサーバを呼び出し、最新情報を取り込んだサービスを展開する利用の使い分けが可能です。

IDトークン(Base64)
ヘッダー
ペイロード

IDトークンの構造を把握するには、jwt.ioというサイトが非常に便利です。IDトークンをそのまま貼り付ければ、ヘッダー、ペーロード、署名にうまく分解し、人間の読み取れる形式に変換してくれます。

IDトークンを受け取ったら、JWKS公開鍵を取得し、署名検証します。署名検証の方法は、IDトークンのヘッダーに含まれています。例えば、HS256というのはクライアントシークレットを鍵として署名検証してくださいという意味で、RS256は公開鍵方式で署名しているのでJWKS公開鍵を取ってきてくださいという意味です。

IDトークンが破損・改ざんされていないことを確認したら、ペイロードの内にある認可コードのハッシュ値(パラメータ名はc_hash、上記の図中にはありません。)アクセストークンのハッシュ値(パラメータ名はat_hash、上記の図中にはありません。)も破損・改ざんされていないことが保証されます。これらのハッシュ値から、それぞれ認可コードとアクセストークンが破損・改ざんされていないことを確認できます。