OIDC周りについて調べておく
OIDC について調査しておく必要があったので、メモしておく
OIDCとは何か?
OIDC(OpenID Connect)はOAuth 2.0を拡張したユーザーの認証を行うための仕組み。
OAuth 2.0は、クライアントがリソースにアクセスする権限の付与(認可)を行うための仕組み。OAuth2.0ではアクセストークンの発行フローを定めている。
OIDCはOAuth2.0がベースとなっている仕組みで、IDトークンの発行フローを定めている。
この二 つを区別する要素として「認証」と「認可」で分ければ良さげ。
認証・認可の区別
認証(Authentication AuthN):ユーザーが提供するアイデンティティ(メールアドレス・パスワードなど)を検証し、ユーザーが誰であるかを確認する。 認可(Authorization AuthZ):ユーザーのリソースに対するアクセスを許可・拒否する。
認証
https://qiita.com/TakahikoKawasaki/items/4ee9b55db9f7ef352b47
認証ではIDトークンと呼ばれるものを発行し、クライアントアプリケーションとのセッションを確立する。
IDトークン
https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06
https://openid.net/specs/openid-connect-core-1_0.html#IDToken
The primary extension that OpenID Connect makes to OAuth 2.0 to enable End-Users to be Authenticated is the ID Token data structure. The ID Token is a security token that contains Claims about the Authentication of an End-User by an Authorization Server when using a Client, and potentially other requested Claims. The ID Token is represented as a JSON Web Token (JWT).
ユーザーの認証を可能にするために OpenID Connect が OAuth 2.0 に加える主な拡張機能は、ID トークン データ構造です。ID トークンは、クライアントの使用時に認可サーバーによるエンドユーザーの認証に関するクレーム、および場合によってはその他の要求されたクレームを含むセキュリティ トークンです。ID トークンは、 JSON Web トークン (JWT) [JWT] として表されます。
IDトークンはJWTの一種。
OIDCがOAuth2.0に対しておこなった主要な拡張が、まさに ID トークンというデータ構造として表される。
書式(Json Web Token)
ヘッダー.キー.初期ベクター.暗号文.認証タグ
https://tools.ietf.org/html/rfc7519
「JWT とは、JSON 形式で表現されたクレーム (claim) の集合を、JWS もしくは JWE に埋め込んだもの」
ほえ〜知らんかった。
JWTの中でも、ペイロードの埋め込み方法にJWSとJWEがあるらしい。
書式(Json Web Signature)
ヘッダー.ペイロード.署名
認証情報に関してはペイロードをデコード するとJSONを取得可能。ヘッダーとペイロードの中身を担保するために署名がある。
JWS形式のJWTでは、JSON形式で表現されたクレームをBASE64エンコードしたものをペイロードにセットする。
書式(Json Web Encryption)
ヘッダー.キー.初期ベクター.暗号文.認証タグ
IDトークンを暗号化したい場合はこちらの書式らしい。 JWE形式のJWTでは、JSON形式で表現されたクレームをを平文として暗号化したものをBASE64エンコードし、ペイロードにセットする。