fluid_27’s blog

勉強した内容をアウトプットするためのブログ

前に勉強してたのに、何度も調べ直すやつあるよね? ~OIDC編~

これ、前に調べたけどなんだっけ?

っていうのよくありません?

自分はめちゃくちゃあります。

ということで今回は前に勉強したけど、ふんわり理解していたので再度勉強し直す。をやってみました。

OIDC(OpenID Connect)って結局なんなん?

OpenIDプロバイダに対してIDトークンの発行を要求する際の、リクエストとレスポンスの形式を標準化したプロトコル

以上です。

もうちょい具体的に言うと

OIDC(OpenID Connect)とはOAuth 2.0を拡張してユーザー認証を扱えるようにしたもので、クライアントがOpenIDプロバイダーに対してIDトークン発行を要求した際の、リクエストとレスポンスの形式を標準化したプロトコルのこと。

具体的には下記の手順でIDトークンを発行している。

1. クライアント → OpenIDプロバイダー
 IDトークンを要求する。
2. OpenIDプロバイダー → ユーザー → OpenIDプロバイダー
 OpenIDプロバイダーがユーザーに対してログイン画面などを出して、ユーザー認証を行う。
3. OpenIDプロバイダー → クライアント
 認可コードを渡す。
4. クライアント → OpenIDプロバイダー → クライアント
 認可コードと引き換えにIDトークンを発行し、クライアントに返却する。

だけだと、分かったような分からないような感じなので、AIに頼んでどういう値を受け渡ししているかをシーケンス図にしてみた。
※ OIDCだけでなく、アクセストークンの発行も兼ねたシーケンスになっていますが、実際はIDトークンとアクセストークンを同時に発行することが多いと思うので良しとします。

②~⑦までの一連のやり取りでIDトークンを発行されていますね。
ただ、そもそも

IDトークンとは

ユーザー認証情報を含んでいるトークンのこと。
もう少し具体的に言うと、OpenID Connectで発行されるJWT。

JWTとは

JSON Web Token。
JSON 形式で表現されたクレーム(認証情報などの実データ)を、JWS もしくは JWE に埋め込んだもの。
JWTはあくまでもフォーマット。

JWSとは

JSON Web Signature。
JWTに署名を加えて改ざんを防止する仕様。
大体はIDトークンは後述のJWEではなく、JWSで認証情報を保護している場合が多い。

JWEとは

JSON Web Encryption。
JWTを暗号化して中身を秘匿するための仕様。
JWSよりも高いセキュリティ要件が発生する環境で採用される。らしい。

つまり、、、IDトークンとは

ユーザーの認証情報をJWS形式(もしくはJWE形式)でJWTにしたもの。


上記のJWT, JWSなどの説明については全人類がお世話になっている下記記事で分かりやすく説明されてます。
IDトークンが分かれば OpenID Connect が分かる #OAuth - Qiita

まとめると

OIDC(OpenID Connect)とはOAuth 2.0を拡張してユーザー認証を扱えるようにしたもので、クライアントがOpenIDプロバイダーに対してIDトークン発行を要求した際の、リクエストとレスポンスの形式を標準化したプロトコルのこと。
IDトークンとはユーザーの認証情報をJWTにしたもの。

おそらく、すでに全人類が見ている参考ブログ

qiita.com
qiita.com
qiita.com
qiita.com
tech-lab.sios.jp