マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

Finalを参照して記述。

Standardクレーム

JWTのクレームを除く(subだけ重複)。

グループ名

クレーム名

一覧

項番グループ名意味
クレーム名
1subユーザーの一意識別子
2profileプロフィール
2-1nameフルネーム
2-2given_name
2-3family_name
2-4middle_nameミドルネーム
2-5nicknameニックネーム
2-6preferred_username好みのユーザー名
2-7profileプロフィールページの URL
2-8pictureプロフィール画像の URL
2-9websiteWeb サイトやブログの URL
2-10gender性別。female と male が定義済み。
2-11birthdate誕生日。YYYY-MM-DD。
2-12zoneinfoタイムゾーン。Europe/Paris など。
2-13localeロケール。en-US など。
2-14updated_at情報最終更新日。Unix エポックからの経過秒数。
3email電子メール
3-1email電子メールアドレス
3-2email_verified電子メールアドレスが検証済みか否かの真偽値
4phone電話
4-1phone_number電話番号
4-2phone_number_verified電話番号が検証済みか否かの真偽値
5address住所 JSON object。書式は「5.1.1. Addressクレーム」に記載。
5-1formattedフォーマットされたフルメールアドレス、表示用・郵送用に使用
5-2street_address通り・番地、号室、私書箱、複数行の拡張された住所情報。
5-3localityCity or locality
5-4regionState, province, prefecture, or region.
5-5postal_codeZip code or postal code
5-6countryCountry name

格納要求

scopeパラメタによる格納要求

scopeパラメタによってユーザー属性クレーム群の格納要求を行うことができる。

グループ名

前述のグループ名(profile, email, phone, address)をscope値に指定可能。

格納部位

  • UserInfo?エンドポイントからUserInfo?レスポンス(JSON オブジェクト)として返される.
  • response_type 値が id_token の場合、
    • この場合、Access Token が発行されない。
    • ユーザー属性クレーム群はID Token で返却される。

claimsパラメタによる詳細な格納要求

claimsパラメタによって、scopeパラメタより詳細なユーザー属性クレーム群の格納要求を行うことができる。

  • claimsパラメタを使用して特定のクレームの返却を要求する。
    claimsパラメタは、クレームをリスト化したJSON オブジェクトである。

トップレベルメンバ

個別のクレームの名前をメンバー名とする JSON オブジェクト

  • userinfoメンバ (OPTIONAL)
    UserInfo?エンドポイントへ返却を要求する個々のクレームのリスト。
  • 当メンバが存在した場合、
    • scopeパラメタで要求されたクレームに加え、
    • 当メンバでリストされたクレームも返却される。
  • 当メンバが存在しなかった場合、
    • scopeパラメタで要求されたクレームのみが返却される。
    • userinfoメンバを指定する際は、UserInfo? Endpoint を使用するために、
      response_type に対し, Access Token を Client に発行するタイプの値を指定しなければならない。
  • id_tokenメンバ (OPTIONAL)
    ID トークン内に格納して返却を要求する個々のクレームのリストを示す。
  • 当メンバが存在した場合、
    • デフォルトのクレームに加え
    • 当メンバでリストされたクレームも返却される。
  • 当メンバが存在しなかった場合、
    • デフォルトのクレームのみが返却される。

個別のクレーム値

  • 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の例

クレーム要求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 メソッドをサポートする。
  • UserInfo?リクエストの一例を示す:
    GET /userinfo HTTP/1.1
    Host: server.exampletechinfoofmicrosofttech.osscons.jp
    Authorization: Bearer ・・・・・

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"
     }
  • 失敗
     HTTP/1.1 401 Unauthorized
     WWW-Authenticate: error="invalid_token",
       error_description="The Access Token expired"

Discovery、Dynamic Client Registrationとの関連

設定によって、ID トークン相当の情報が、

  • JWT 形式もしくは JSON 形式で返される。
  • JWTの署名アルゴリズムも影響を受ける。

クレーム・タイプ

  • なお、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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-19 (水) 16:46:39 (1767d)