「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>OpenID Connect]]

* 目次 [#g1c7a054]
#contents

*概要 [#c6141615]
-Final: OpenID Connect Core 1.0 incorporating errata set 1~
http://openid.net/specs/openid-connect-core-1_0.html
--2. ID Token~
http://openid.net/specs/openid-connect-core-1_0.html#IDToken
--3.3.2.11. ID Token (Hybrid Flow)~
http://openid.net/specs/openid-connect-core-1_0.html#HybridIDToken
-OpenID Connect で [[OAuth]] 2.0 を拡張した主要な~
クレーム([[クレームセット>#h586dfab]])を格納するアサーション

**概要 [#fe1155a7]
-OpenID Connect で [[OAuth]] 2.0 を拡張した主要なクレームが、[[ID トークン>#ofb73c59]]。

-仕様全体を通してメッセージ形式に[[JWT]]を採用。
-仕様全体を通してメッセージ形式に[[JWT]](アサーション)を採用。
--メッセージ形式:[[JWT]](JSON Web Tokenの略)
--クレーム暗号化:[[JWT]]の JWS or JWE を使用する。

-以下のクレームの値を含む[[クレームセット>#h586dfab]]。
--発行元のIdp(OP)識別子
--発行先のRP識別子(client_id)
--ユーザー識別子
--発行日時

-クレームの扱いについて[[外部クレーム>#jb63c82f]]機能を定義している。
--集約クレーム
--分散クレーム

*詳細 [#p9cc4884]

**クレームセット [#h586dfab]

***必須クレーム群 [#ffe4c45b]
-iss (issuer) クレーム
--([[OAuth]] 2.0で言う所の)Authorization Serverの識別子。
--URI形式が推奨
これは、OpenID Connect Discovery 1.0 仕様をサポートするのであれば、~
「{issクレームの値}/.well-known/openid-configuration」という URL で~
リクエストを受け付ける必要があるため。

-sub (subject) クレーム~
ユーザーテーブルのプライマリーキーやそれに準ずるもの。

-aud (audience) クレーム~
([[OAuth]] 2.0で言う所の)クライアント識別子。
-aud (audience) クレーム
--client_idの値を含む。
--複数要素の配列を含んでも良い (MAY)

-exp (expiration time) クレーム
--JWT の有効期限
--[[JWT]] の有効期限
--Unix エポックからの経過秒数(ミリ秒ではなく秒)

-iat (issued at)クレーム
--JWT の発行日時
--[[JWT]] の発行日時
--Unix エポックからの経過秒数(ミリ秒ではなく秒)

***ケースバイケースなクレーム群 [#d9a64ea2]

-auth_time クレーム
--ユーザー認証時刻
--Unix エポックからの経過秒数(ミリ秒ではなく秒)
--リクエスト・パラメタやメタ情報設定次第で必須となるもよう。

-[[nonce>https://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%B3%E3%82%B9]] クレーム
--リプレイアタック防止を目的とするクレーム。
--[[ID トークン>#ofb73c59]]発行依頼に付属するnonce 値を、そのまま埋め込む。
--[[Implicit Flow>#e7adf5c2]]、[[Hybrid Flow>#l565139a]]の場合は必須となるもよう。
--ID トークン発行依頼に付属するnonce 値を、そのまま埋め込む。
--[[Implicit Flow>OpenID Connect#e7adf5c2]]、[[Hybrid Flow>OpenID Connect#l565139a]]の場合は必須となるもよう。

***オプションのクレーム群 [#l52144f8]

-acr クレーム
--認証コンテキストのクラス
--必要に応じて再認証を催す。
--仕様で幾つか定義されているらしいが詳細不明。

-amr クレーム
--認証手法を示す。
--利用用途が不明。
--仕様範囲外、クレームの利用者が規則を決めて運用する。

-azp クレーム
--認可された対象者
--特に、aud が複数要素の配列の場合、azp で認可された対象者を明示する。
--認証されたユーザと認可されたユーザが違うケースを想定している模様。

***[[Hybrid Flow>#l565139a]]のクレーム [#c007540d]
-[[Hybrid Flow>#l565139a]]の場合、以下のクレームは、
--Authorization Endpoint から返す ID Tokenには必須。
--Token Endpoint から返す ID Token からは省略可能。
***[[Hybrid Flow>OpenID Connect#l565139a]]のクレーム [#c007540d]
-[[Hybrid Flow>OpenID Connect#l565139a]]の場合、以下のクレームは、
--Authorization Endpoint から返す場合、必須。
--以下の場合、省略可能(あってもイイ)
---[[Hybrid Flow>OpenID Connect#l565139a]]以外の場合
---Token Endpoint から返す場合

-at_hash
--Access Token のハッシュ値~
ID Token の JOSE Header にある alg Header Parameterのアルゴリズムで使用されるハッシュアルゴリズムを用い、~
Access Token のASCII オクテット列からハッシュ値を求め、左半分を base64url エンコードした値。
--response_typeにid_tokenとtokenが含まれる時に必須だが、ソレ以外の場合は任意。

-c_hash
--Code のハッシュ値~
ID Token の JOSE Header にある alg Header Parameterのアルゴリズムで使用されるハッシュアルゴリズムを用い、~
Code のASCII オクテット列からハッシュ値を求め、左半分を base64url エンコードした値。
--response_typeにcodeとid_tokenが含まれる時に必須だが、ソレ以外の場合は任意。

***[[ユーザー属性クレーム群>#kb7212b1]] [#r21f1653]
その他、[[ユーザー属性クレーム群>#kb7212b1]]を格納する。
***[[ユーザー属性クレーム群>OpenID Connect#kb7212b1]] [#r21f1653]
その他、[[ユーザー属性クレーム群>OpenID Connect#kb7212b1]]を格納する。

**外部クレーム [#jb63c82f]
Idp(OP)は、扱うクレームの内容によって、
-[[集約クレーム>#yfd0840d]]
-[[分散クレーム>#xaa4e17c]]

どちらを利用すべきかを判断する必要がある。

***集約クレーム(Aggregated Claims) [#yfd0840d]
-別のIdp(OP)が持つクレームを署名付きで提供すること。

-RPからリクエストを受けたIdp(OP)は、事前に取得していた、~
もしくは動的に取得した別のIdp(OP)のクレームをレスポンスに含む。

一定期間変更されないことが保証されており~
キャッシュの効果があるものは集約クレーム。

***分散クレーム(Distributed Claims) [#xaa4e17c]
クレームそのものではなく、問い合わせ先のURLを扱う。

-Publicなクレームの場合
--エンドポイントのURL

-ユーザー認可が必要な場合
--エンドポイントのURL
--OAuth 2.0のアクセストークン

をレスポンスに含む。

頻繁に更新されるものは分散クレーム。

**例 [#m4e7fa61]
***Google [#jaec1c75]
**検証処理 [#y61f2006]
Clientは、IDトークンを検証する。

***基本的な検証処理 [#cfcb18ec]
-[[JWS]]署名の検証 / [[JWE]]暗号を復号

--Client は Issuer から提供された鍵を利用しなければならない (MUST).
---[[MAC系(HS256, HS384, HS512)の場合の鍵>OpenID Connect - 暗号関連]]
---[[RSA系(HS256, HS384, HS512)の場合の鍵>OpenID Connect - 暗号関連]]

--alg の値は (SHOULD)
---デフォルトの RS256
---もしくは [[Registration>OpenID Connect#e0b59f80]] によるid_token_signed_response_alg パラメタ値

-iss Claimの検証(Discovery で取得したIssuer値に一致)。

-aud Claim or azp Claimの検証
--aud Claim に 自身の client_id が含まれることを確認する。
--aud Claimが複数要素の配列の場合、azp Claim に含まれることを確認すべき。

-Time
--exp Claimの検証(現在時刻より後)。
--iat Claimの検証(Clientから見て古過ぎない、nonce 保存期間を制限)。
--auth_time Claimの検証(max_ageを使用してチェックし再認証を要求)。

-OIDC
--nonce Claimの検証。
--acr Claimの検証(適切かどうかをチェック、値と意味は仕様の対象外)

-Hash
--at_hash Claimの検証。
--c_hash Claimの検証。

***フロー毎の差異 [#d74c7831]

-[[Authorization Code Flow>OpenID Connect#mcde509a]]
--Token Endpoint の間の直接通信により受け取った場合、~
トークンの署名確認の代わりに TLS で issuer を確認してもよい (MAY). 

-[[Implicit Flow>OpenID Connect#e7adf5c2]]
-[[Hybrid Flow>OpenID Connect#l565139a]]

*例 [#m4e7fa61]

**Google [#jaec1c75]
GoogleでOpenID Connectの認証で取得したクレームセット。~
(id_tokenそのものなのか?、[[ユーザー情報エンドポイント>#k1d9c845]]から取得したクレームか?)
(id_tokenそのものなのか?、[[ユーザー情報エンドポイント>OpenID Connect#k1d9c845]]から取得したクレームか?)

 {
   "iss":"accounts.google.com",
   "at_hash":"・・・", ← Hybrid Flowの追加クレーム
   "email_verified":"true",
   "sub":"ユーザーの一意識別子",
   "azp":"認可された対象者のID.apps.googleusercontent.com",
   "email":"・・・・",
   "aud":"クライアント識別子.apps.googleusercontent.com",
   "iat":JWT の発行日時(Unix時間),
   "exp":JWT の有効期限(Unix時間)
 }

[[ココ>#v5e6dad3]]を見ると、これは恐らく、id_tokenなのだろうなと。

以下のGoogle公式のマニュアルにも記載があった。

-OpenID Connect | Google Identity Platform | Google Developers~
https://developers.google.com/identity/protocols/OpenIDConnect

*参考 [#yce99a85]
-Final: OpenID Connect Core 1.0 incorporating errata set 1~
http://openid.net/specs/openid-connect-core-1_0.html
--2. ID Token~
http://openid.net/specs/openid-connect-core-1_0.html#IDToken
--3.3.2.11. ID Token (Hybrid Flow)~
http://openid.net/specs/openid-connect-core-1_0.html#HybridIDToken

----
Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS