「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
Finalを参照して記述。
Standardクレーム †
JWTのクレームを除く(subだけ重複)。
グループ名 †
クレーム名 †
一覧 †
項番 | グループ名 | 意味 | | クレーム名 | 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 |
格納要求 †
scopeパラメタによる格納要求 †
scopeパラメタによってユーザー属性クレーム群の格納要求を行うことができる。
グループ名 †
前述のグループ名(profile, email, phone, address)をscope値に指定可能。
格納部位 †
- UserInfo?エンドポイントからUserInfo?レスポンス(JSON オブジェクト)として返される.
- response_type 値が id_token の場合、
- この場合、Access Token が発行されない。
- ユーザー属性クレーム群はID Token で返却される。
claimsパラメタによる詳細な格納要求 †
claimsパラメタによって、scopeパラメタより詳細なユーザー属性クレーム群の格納要求を行うことができる。
- userinfoと、id_tokenに対するクレームを要求できる。
- claimsパラメタを使用して特定のクレームの返却を要求する。
claimsパラメタは、クレームをリスト化したJSON オブジェクトである。
トップレベルメンバ †
個別のクレームの名前をメンバー名とする JSON オブジェクト
- userinfoメンバ (OPTIONAL)
UserInfo?エンドポイントへ返却を要求する個々のクレームのリスト。
- 当メンバが存在した場合、
- scopeパラメタで要求されたクレームに加え、
- 当メンバでリストされたクレームも返却される。
- 当メンバが存在しなかった場合、
- scopeパラメタで要求されたクレームのみが返却される。
- userinfoメンバを指定する際は、UserInfo? Endpoint を使用するために、
response_type に対し, Access Token を Client に発行するタイプの値を指定しなければならない。
- id_tokenメンバ (OPTIONAL)
ID トークン内に格納して返却を要求する個々のクレームのリストを示す。
- 当メンバが存在した場合、
- デフォルトのクレームに加え
- 当メンバでリストされたクレームも返却される。
個別のクレーム値 †
- JSON値
- essential
Essential(必須) or Voluntary(任意)
{"essential": true}
クレーム要求JSONの例 †
クレーム要求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"] }
}
}
エンドポイント †
- OAuth 2.0のResource ServerのWebAPI
- HTTP的には、HTTPS必須
Request †
- HTTP の GET と POST メソッドをサポートする。
Response †
- UserInfo?レスポンスは JSON オブジェクトとして返される。
- UserInfo?クレームは JSON オブジェクトのメンバとして返される。
- UserInfo?レスポンスのクレームセットには、必ず sub (subject) クレームを含める。
- ユーザー属性クレーム群に加え、そこに明記されていないクレームも返却可能。
- Idp(OP)は要求された クレームの値を、必ずしも返さなくてもよい。
- クレームが返されない場合、null や空文字列ではなく、JSON オブジェクトのメンバから除かれるべき。
- JWTによる署名 or 暗号化、若しくは、署名 and 暗号化を行う場合
- クレームは JWT で返されるため、Content-Type は application/jwtとする。
- 署名する場合、subに加え、iss (issuer) クレームと aud (audience) クレームを含むべき。
- 暗号化のアルゴリズムはRegistrationによるuserinfo_encrypted_response_algで指定する。
- 署名と暗号化の両方が要求された場合、レスポンスは JWT で定義されているように、
結果はネストされた JWT となり、 署名した後に暗号化しなければならない。
- クライアントによるUserInfo?レスポンスの検証
- TLS サーバー証明書チェックを通じてIdp(OP)を検証する。
- UserInfo?レスポンスがJWTの場合、署名検証や復号化を行う。
- ID トークンとUserInfo?クレームのsubが一致することを検証する必要がある。
Request & Responseの例 †
以下に 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"
}
設定によって、ID トークン相当の情報が、
クレーム・タイプ †
- 以下の3つのクレーム値の表現形式が定義されている。
- なお、Aggregatedクレームと、Distributedクレームは、
- sub 値が Claims Provider に置ける End-User の識別子でない限り, sub (subject) クレームを含むべきでない.
- また OpenID Provider あるいは他の Party が利用するために sub 値を提供すべきでもない.
Normalクレーム †
- OpenID Provider によって直接アサートされたクレーム。
- JSON オブジェクトの中にメンバとして表記される。
{
"name": "Jane Doe",
"given_name": "Jane",
"family_name": "Doe",
"email": "janedoe@example.com",
"picture": "http://example.com/janedoe/me.jpg"
}
Aggregatedクレーム †
概要 †
- OpenID Provider 以外の Claims Provider によってアサートされたクレームであるが, OpenID Provider から返却されるクレーム.
- JSON オブジェクト中で, _claim_names および _claim_sources という特殊なメンバを用いて表記される.
- _claim_names
_claim_sources メンバーの中にあるメンバー名への参照
- _claim_sources
JWTを値として持つJSON オブジェクト(subクレームを含まない)
- Aggregatedクレーム本体
以下を「jwt_header.jwt_part2.jwt_part3」とJWT化する。
{
"address": {
"street_address": "1234 Hollywood Blvd.",
"locality": "Los Angeles",
"region": "CA",
"postal_code": "90210",
"country": "US"},
"phone_number": "+1 (310) 123-4567"
}
- Aggregatedクレームを含むクレームセット
{
"name": "Jane Doe",
"given_name": "Jane",
"family_name": "Doe",
"birthdate": "0000-03-22",
"eye_color": "blue",
"email": "janedoe@example.com",
"_claim_names": {
"address": "src1",
"phone_number": "src1"
},
"_claim_sources": {
"src1": {"JWT": "jwt_header.jwt_part2.jwt_part3"}
}
}
Distributedクレーム †
概要 †
- OpenID Provider 以外の Claims Provider によってアサートされたクレームであり, OpenID Provider からはその参照だけが返却されるクレーム.
- JSON オブジェクト中で, _claim_names および _claim_sources という特殊なメンバを用いて表記される.
- _claim_names
_claim_sources メンバーの中にあるメンバー名への参照
- _claim_sources
endpoint、access_tokenのメンバと値を含む JSON オブジェクト
- endpoint (REQUIRED):
JWT形式のDistributedクレームセットを提供するエンドポイントのUrl
- access_token (OPTIONAL):
endpoint(Resource Server)を利用するためのaccess_token
- Distributedクレーム本体
以下を「jwt_header.jwt_part2.jwt_part3」とJWT化して、エンドポイントからレスポンスする。
- その1
{
"shipping_address": {
"street_address": "1234 Hollywood Blvd.",
"locality": "Los Angeles",
"region": "CA",
"postal_code": "90210",
"country": "US"},
"payment_info": "Some_Card 1234 5678 9012 3456",
"phone_number": "+1 (310) 123-4567"
}
- その2
{
"credit_score": 650
}
- Distributedクレームを含むクレームセット
{
"name": "Jane Doe",
"given_name": "Jane",
"family_name": "Doe",
"email": "janedoe@example.com",
"birthdate": "0000-03-22",
"eye_color": "blue",
"_claim_names": {
"payment_info": "src1",
"shipping_address": "src1",
"credit_score": "src2"
},
"_claim_sources": {
"src1": {"endpoint":
"https://bank.example.com/claim_source"},
"src2": {"endpoint":
"https://creditagency.example.com/claims_here",
"access_token": "ksj3n283dke"}
}
}
その他 †
多言語化 †
- クレームによっては多言語化可能
- クレーム名に続いて"#ja-Kana-JP"などの言語タグを付与する。
- 言語タグとしては、BCP47 [RFC5646] 言語タグを使用。
参考 †
- Final: OpenID Connect Core 1.0 incorporating errata set 1
Tags: :IT国際標準, :認証基盤, :クレームベース認証, :OAuth
|