「[[マイクロソフト系技術情報 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 **概要 [#fe1155a7] -OpenID Connect で [[OAuth]] 2.0 を拡張した主要なクレームが、[[ID トークン>#ofb73c59]]。 -仕様全体を通してメッセージ形式に[[JWT]]を採用。 --メッセージ形式:[[JWT]](JSON Web Tokenの略) --クレーム暗号化:[[JWT]]の JWS or JWE を使用する。 -以下のクレームの値を含む[[クレームセット>#h586dfab]]。 --発行元のIdp(OP)識別子 --発行先のRP識別子(client_id) --ユーザー識別子 --発行日時 -クレームの扱いについて[[外部クレーム>#jb63c82f]]機能を定義している。 --集約クレーム --分散クレーム **クレームセット [#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で言う所の)クライアント識別子。 -exp (expiration time) クレーム --JWT の有効期限 --Unix エポックからの経過秒数(ミリ秒ではなく秒) -iat (issued at)クレーム --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]]の場合は必須となるもよう。 ***オプションのクレーム群 [#l52144f8] -acr クレーム --認証コンテキストのクラス --必要に応じて再認証を催す。 --仕様で幾つか定義されているらしいが詳細不明。 -amr クレーム --認証手法を示す。 --利用用途が不明。 --仕様範囲外、クレームの利用者が規則を決めて運用する。 -azp クレーム --認可された対象者 --認証されたユーザと認可されたユーザが違うケースを想定している模様。 ***[[Hybrid Flow>#l565139a]]のクレーム [#c007540d] -[[Hybrid Flow>#l565139a]]の場合、以下のクレームは、 --Authorization Endpoint から返す ID Tokenには必須。 --Token Endpoint から返す ID Token からは省略可能。 -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]]を格納する。 **外部クレーム [#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] GoogleでOpenID Connectの認証で取得したクレームセット。~ (id_tokenそのものなのか?、[[ユーザー情報エンドポイント>#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] ---- Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]