- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>OpenID Connect]]
* 目次 [#m79145b4]
#contents
*ユーザー属性クレーム群 [#kb7212b1]
**Standard Claims [#c71c8ad5]
|項番|>|グループ名|意味|h
|~||クレーム名|~|h
|1|>|sub|ユーザーの一意識別子|
|2|>|profile|プロフィール|
|2-1|・|name|フルネーム|
|2-2|・|given_name|名|
|2-3|・|family_name|姓|
|2-4|・|middle_name|ミドルネーム|
|2-5|・|nickname|ニックネーム|
|2-6|・|preferred_username|好みのユーザー名|
|2-7|・|profile|プロフィールページの URL|
|2-8|・|picture|プロフィール画像の URL|
|2-9|・|website|Web サイトやブログの URL|
|2-10|・|gender|性別。female と male が定義済み。|
|2-11|・|birthdate|誕生日。YYYY-MM-DD。|
|2-12|・|zoneinfo|タイムゾーン。Europe/Paris など。|
|2-13|・|locale|ロケール。en-US など。|
|2-14|・|updated_at|情報最終更新日。Unix エポックからの経過秒数。|
|3|>|email|電子メール|
|3-1|・|email|電子メールアドレス|
|3-2|・|email_verified|電子メールアドレスが検証済みか否かの真偽値|
|4|>|phone|電話|
|4-1|・|phone_number|電話番号|
|4-2|・|phone_number_verified|電話番号が検証済みか否かの真偽値|
|5|>|address|住所 JSON object。書式は「5.1.1. Addressクレーム」に記載。|
|5-1|・|formatted|フォーマットされたフルメールアドレス、表示用・郵送用に使用|
|5-2|・|street_address|通り・番地、号室、私書箱、複数行の拡張された住所情報。|
|5-3|・|locality|City or locality|
|5-4|・|region|State, province, prefecture, or region.|
|5-5|・|postal_code|Zip code or postal code|
|5-6|・|country|Country name|
**多言語化 [#u1556f80]
-クレームによっては多言語化可能
-クレーム名に続いて"#ja-Kana-JP"などの言語タグを付与する。
-言語タグとしては、[[BCP47 [RFC5646]>https://tools.ietf.org/html/rfc5646]] 言語タグを使用。
*ユーザー属性クレーム群の格納要求 [#qb26baa1]
**scopeパラメタによる格納要求 [#k95e5b83]
scopeパラメタによってユーザー属性クレーム群の格納要求を行うことができる。
***グループ名 [#xc20fc3f]
[[前述のグループ名>#c71c8ad5]](profile, email, phone, address)をscope値に指定可能。
***格納部位 [#z4362392]
-UserInfoエンドポイントからUserInfoレスポンス(JSON オブジェクト)として返される.
-response_type 値が id_token の場合、
--この場合、Access Token が発行されない。
--ユーザー属性クレーム群はID Token で返却される。
**claimsパラメタによる詳細な格納要求 [#lfaacf35]
claimsパラメタによって、[[scopeパラメタ>#k95e5b83]]より詳細なユーザー属性クレーム群の格納要求を行うことができる。
-userinfoと、id_tokenに対するクレームを要求できる。
--通常、[[scopeパラメタ>#k95e5b83]]を使用して、クレームを要求するが、~
http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims
--claimsパラメタを使用して、クレームを要求することもできる。~
http://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter
-claimsパラメタを使用して特定のクレームの返却を要求する。~
claimsパラメタは、クレームをリスト化したJSON オブジェクトである。
--[[ユーザー属性クレーム群>#kb7212b1]]に含まれていないクレームを要求する唯一の方法。
--[[scopeパラメタ>#k95e5b83]]では指定することが出来ない[[ユーザー属性クレーム群>#kb7212b1]]の特定の組み合わせを要求する唯一の方法。
***トップレベルメンバ [#va260684]
個別のクレームの名前をメンバー名とする JSON オブジェクト
-userinfoメンバ (OPTIONAL)~
UserInfoエンドポイントへ返却を要求する個々のクレームのリスト。
--当メンバが存在した場合、
---[[scopeパラメタ>#k95e5b83]]で要求されたクレームに加え、
---当メンバでリストされたクレームも返却される。
--当メンバが存在しなかった場合、
---[[scopeパラメタ>#k95e5b83]]で要求されたクレームのみが返却される。
---userinfoメンバを指定する際は、UserInfo Endpoint を使用するために、~
response_type に対し, Access Token を Client に発行するタイプの値を指定しなければならない。
-id_tokenメンバ (OPTIONAL)~
[[ID トークン>OpenID Connect#ofb73c59]]内に格納して返却を要求する個々のクレームのリストを示す。
--当メンバが存在した場合、
---デフォルトのクレームに加え
---当メンバでリストされたクレームも返却される。
--当メンバが存在しなかった場合、
---デフォルトのクレームのみが返却される。
***個別のクレーム値 [#q9d112d2]
-null値~
デフォルトの形式
-JSON値
--essential~
Essential(必須) or Voluntary(任意)
{"essential": true}
--value~
指定の値を返す(用途不明確
{"value": "248289761001"}
--values~
優先順に指定の値を返す(用途不明確
"acr": {"essential": true,
"values": ["urn:mace:incommon:iap:silver",
"urn:mace:incommon:iap:bronze"]}
***クレーム要求JSONの例 [#pd68c57b]
クレーム要求JSONの例を以下に示す:
{
"userinfo":
{
"given_name": {"essential": true},
"nickname": null,
"email": {"essential": true},
"email_verified": {"essential": true},
"picture": null,
"http://example.info/claims/groups": null
},
"id_token":
{
"auth_time": {"essential": true},
"acr": {"values": ["urn:mace:incommon:iap:silver"] }
}
}
*ユーザー情報エンドポイント [#k1d9c845]
-OAuth 2.0のResource ServerのWebAPI
-HTTP的には、HTTPS必須
**Request [#y620d43e]
-HTTP の GET と POST メソッドをサポートする。
-UserInfoリクエストの一例を示す:
GET /userinfo HTTP/1.1
Host: server.exampletechinfoofmicrosofttech.osscons.jp
Authorization: Bearer ・・・・・
**Response [#k20c216c]
-UserInfoレスポンスは JSON オブジェクトとして返される。
--UserInfoクレームは JSON オブジェクトのメンバとして返される。
--UserInfoレスポンスのクレームセットには、必ず sub (subject) クレームを含める。
--[[ユーザー属性クレーム群>#kb7212b1]]に加え、そこに明記されていないクレームも返却可能。
--Idp(OP)は要求された クレームの値を、必ずしも返さなくてもよい。
--クレームが返されない場合、null や空文字列ではなく、JSON オブジェクトのメンバから除かれるべき。
-JWTによる署名 or 暗号化、若しくは、署名 and 暗号化を行う場合
--クレームは JWT で返されるため、Content-Type は application/jwtとする。
--署名する場合、subに加え、iss (issuer) クレームと aud (audience) クレームを含むべき。
--暗号化のアルゴリズムは登録時のuserinfo_encrypted_response_algで指定する。
--署名と暗号化の両方が要求された場合、レスポンスは [[JWT]] で定義されているように、~
結果はネストされた [[JWT]] となり、 署名した後に暗号化しなければならない。
-クライアントによるUserInfoレスポンスの検証
--TLS サーバー証明書チェックを通じてIdp(OP)を検証する。
--UserInfoレスポンスが[[JWT]]の場合、署名検証や復号化を行う。
--[[ID トークン>OpenID Connect#ofb73c59]]とUserInfoクレームのsubが一致することを検証する必要がある。
**Request & Responseの例 [#q12483e0]
以下に UserInfoレスポンスの一例を示す。
-成功
HTTP/1.1 200 OK
Content-Type: application/json
{
"sub": "ユーザID 的 な情報",
"name": "Jane Doe",
"given_name": "Jane",
"family_name": "Doe",
"preferred_username": "j.doe",
"email": "janedoe@techinfoofmicrosofttech.osscons.jp",
"picture": "http://techinfoofmicrosofttech.osscons.jp/janedoe/me.jpg"
}
-失敗
HTTP/1.1 401 Unauthorized
WWW-Authenticate: error="invalid_token",
error_description="The Access Token expired"
**[[Discovery、Dynamic Client Registration>OpenID Connect#h5793a09]]との関連 [#u39da1e3]
設定によって、[[ID トークン>OpenID Connect#ofb73c59]]相当の情報が、
-[[JWT]] 形式もしくは [[JSON]] 形式で返される。
-[[JWT]]の署名アルゴリズムも影響を受ける。
*参考 [#d876255d]
-Final: OpenID Connect Core 1.0 incorporating errata set 1
--5.1. Standard Claims~
http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims
--5.4. Requesting Claims using Scope Values~
http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims
--5.5. Requesting Claims using the "claims" Request Parameter~
https://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter
--5.3. UserInfo Endpoint~
http://openid.net/specs/openid-connect-core-1_0.html#UserInfo
----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]