サーバサイドでのOIDCシーケンスとインタフェース項目(ASP.NET COREの場合)

概要

ASP.NET CORE6で、OpenIdConnect(id_token)を使用する場合のシーケンスおよび各要求・応答の項目の説明をします。
今回はテスト用のOIDCサーバを作成しているので、Webサーバ側、OIDCサーバ側ともに説明します。

本ページは、シーケンスと項目の説明のため、実際のプログラムは、テスト用のOIDCサーバを自作する、および、サーバサイドのOIDCサーバの設定をご参照ください。
また、シーケンスの各チェックを何のために行っているかは、id_tokenやaccess_tokenのなりすまし防止についてをご参照ください。

シーケンス

項目

メタ情報(.well-known/openid-configuration)要求(GET)

No項目項目(日本語)備考
1項目なし

メタ情報応答(JSON)

No項目項目(日本語)備考
1issuer発行者oidc_serverトークン発行者。通常はOIDCサーバのURLが設定される。
2jwks_uri公開鍵URI{baseurl}
/AuthServer/Jwks
トークンの署名を複合化するための公開鍵取得用のURL
3authorization_
endpoint
認証エンドポイント{baseurl}
/AuthServer/Auth
認可コード(code)やid_tokenを取得するためのURL
4token_endpointトークンエンドポイント{baseurl}
/AuthServer/Token
id_tokenやaccess_tokenを取得するためのURL。認可コード(code)を指定して取得する(code -> tokenのシーケンス)。
トークン有効期限切れの際のリフレッシュにも使用される(Blazor WebAssembly経由の場合)
5response_types_
supported
サポート対象レスポンスタイプcode, id_token
(リスト)
認証エンドポイントでサポートされるタイプ
今回のテスト用OIDCサーバでは、
code または id_tokenのみサポートしている。
6introspection_
endpoint
イントロスペクションエンドポイントイントロスペクション(トークンの有効性チェック)のためのURL。
今回のテスト用OIDCサーバでは未対応。
id_tokenでは基本的に使用しない。
7userinfo_endpointユーザ情報エンドポイント{baseurl}/AuthServer
/UserInfo
ユーザ情報を取得するためのURL
8end_session_
endpoint
エンドセッションエンドポイントログアウトする際のURL。
今回のテスト用OIDCサーバでは未対応

公開鍵(jwks)要求(GET)

No項目項目(日本語)備考
項目なし   

公開鍵応答(JSON)

No項目項目(日本語)備考
 Keysキーリスト 複数の公開鍵を返却することができる
公開鍵のうち、トークンのヘッダに設定されているkidと公開鍵のkidが一致するものが使用される。
1 ktyキータイプRSA暗号鍵のタイプ
2 algアルゴリズムRS256暗号アルゴリズム
3 usepublic key use(暗号キーの用途)sig暗号キーの用途。sigの場合は署名に使用する。
enc は暗号キーを暗号化するための暗号キーとして使用される(わからん)。
4 nModulus(モジュラス)備考参照秘密鍵から生成した公開鍵のModulus部分。
Base64UInt文字列。
5 eExponent(指数)備考参照秘密鍵から生成した公開鍵のExponent部分。
Base64UInt文字列。
6 kidキーIDtest_client公開鍵は複数登録されていることがある。
id_tokenやaccess_tokenには、署名に使われた鍵のkidが含まれているので、そのkidと一致する公開鍵情報を使用する。
今回のテスト用プログラムでは、kidにclient_idを指定している。

id_token要求(GET)

No項目項目(日本語)備考
1response_typeレスポンスタイプid_tokencode or id_tokenを指定する。
認可の場合はcodeを、id_token取得の場合はid_tokenを指定する。
普通はid_tokenを指定で問題ない。
2client_idクライアントIDtest_clientOIDCサーバから見たクライアント(ブラウザやWebサーバ)のIDを指定する。OIDCサーバとクライアント間で使用するクライアントIDを取り決めておく(OIDCサーバにクライアントIDを登録しておく感じ)。
3redirect_uriリダイレクトURL{baseUrl}/signin-oidccodeやid_tokenを返却するリダイレクト先。
ASP.NETのWebサーバのデフォルトは/signin-oidc。
4stateステート

ランダムな文字列
例)CfDJ8NoLZtPk-fNLjKQV2jeAXteq52Pdb_

9Uvg8miGfZuZ0・・・(省略)

codeやid_tokenの要求に対する応答であることをチェックするために使用する。
5scope利用範囲openid profileopenidを含めると認証のために使用することを示す。profileを含めるとユーザ情報の取得に使用することを示す。
6nonceトークン受け入れチェック

ランダムな文字列
例)638217315074327280.

ZmMxZjQ1YzEtMjZhMC00M・・・(省略)

OIDCサーバから返却されたトークンをWebサーバ側で2重に受け入れないようにするために使用する。
7promptログインプロンプトnullid_token(code -> id_token含む)の場合はnull。
access_token取得の場合はnone or nullが設定される。
8code_challengeコードチャレンジnullid_tokenの場合はnull。
codeの場合はランダムなハッシュ値をもとにしたBase64UInt文字列。
9

code_challenge_

method

コードチャレンジハッシュ化方式nullid_tokenの場合はnull。
codeの場合はハッシュ化方式。ASP.NETの場合はS256。

id_token応答(POST)

No項目項目(日本語)備考
1id_tokenIDトークンid_tokenid_tokenには、ユーザID(subやname)やnonce、Audience(clinet_id)、Issuer、署名、有効期限、署名複合時に使用する暗号キーのID(client_id)の値を含む。
2stateステートid_token要求のstateをそのまま返却する