メインコンテンツまでスキップ

ID Token

ID Token とはユーザー認証情報を含む改ざん検知用の暗号署名付き Token です。JWT(JSON Web Token)フォーマットで Base64URL エンコードされています。 ソーシャルPLUS では、JWT の署名生成アルゴリズムとして RSA-SHA256 を採用しています。 取得した ID Token を使用する前に ID Token の検証 を行ってください。

JWT の詳細な仕様については以下をご参照ください。

ID トークンは機密情報であり、傍受されると不正使用される可能性があります。

パラメーター必須説明
typJWT 固定
kid署名検証に用いる公開鍵の Key ID
Cert エンドポイント で得られる JWK の kid の値に一致する。
algRS256 固定。署名のアルゴリズム

ペイロード

パラメーター必須Scope説明
issstring発行者の識別子。サービス設定ごとに自動で発行される「サービスID」の値
audstring受信者の識別子。クライアント情報の Client ID の値
substringソーシャルPLUS ID
iatnumberID Token の発行時刻。UNIX タイムスタンプ
expnumberID Token の有効期限。UNIX タイムスタンプ
noncestringリプレイアタック防止のランダム値
※Authorization エンドポイントのリクエスト時に nonce パラメータを指定した場合に含まれます。
c_hashstringAuthorization Code のハッシュ値
※Authorization エンドポイントのリクエスト時の response_type パラメーターに code id_token を指定した場合に含まれます。
primary_keystringお客様サービス側ユーザID
providerstringログインプロバイダ(line, apple, yahoo, google, x
provider_uidstringログインプロバイダ側で発行されたユーザー識別子
namestringprofileフルネーム
name#ja-Kana-JPstringprofileフルネーム(カナ表記)
family_namestringprofile
family_name#ja-Kana-JPstringprofile姓(カナ表記)
given_namestringprofile
given_name#ja-Kana-JPstringprofile名(カナ表記)
middle_namestringprofileミドルネーム
preferred_usernamestringprofileユーザー名
profilestringprofileプロフィールページの URL
picturestringprofileプロフィール画像の URL
websitestringprofileウェブサイトの URL
genderstringprofile性別
・男性 male
・女性 female
・その他 other
birthdatestringprofile生年月日
updated_atstringprofileユーザー情報の更新日時
emailstringemailメールアドレス
phone_numberstringphone電話番号
addressAddress objectaddressAddress オブジェクト 参照

Address オブジェクト

パラメーター必須説明
formattedstring住所全体。region, locality, street_address を半角スペースで結合した値
street_addressstring番地以降
localitystring市区町村
regionstring都道府県
postal_codestring郵便番号

検証方法

ID Token を取得したら、以下の手順を参考に検証を行ってください。とくに明記していない限りすべての検証が必須です。JWT 対応のライブラリを用いる場合は各ライブラリに従って適宜必要な処理を行ってください。

  1. JWT はピリオド . で区切られた Header, Payload, Signature の3つで構成されています。それぞれの値を Base64URL でデコードします。

  2. 検証のために Cert エンドポイント で公開鍵を取得します。

  3. Header に含まれる kid と、Cert エンドポイントで取得した公開鍵データの kid が一致するものを用いて、Base64URL デコード前の Header + '.' + Payload に対して Signature が正しい署名であることを検証します。署名生成アルゴリズムは RS256(RSA-SHA256)です。

  4. 発行者 iss の値が、サービス設定ごとに自動で発行される「サービスID」の値と等しいことを確認します。サービス設定ごとに発行される「サービスID」はあらかじめ、ソーシャルログインマネージャー でサービス選択後のヘッダーメニューからコピーして確認することが可能です。

  5. 受信者 aud の値が、クライアント情報の Client ID の値と等しいことを確認します。

  6. (Hybrid フロー利用時)認可コードの置き換え攻撃を防ぐために、認可コード code の値を SHA256 でハッシュ化し、オクテットの前部を Base64URL エンコードした文字列と c_hash の値が等しいことを確認します。

  7. ID Token の有効期限 exp が切れていないことを確認します。

  8. (Implicit フローまたは Hybrid フロー利用時。ご利用サービス側で必要であれば)ID Token の発行時刻 iat が許容範囲内であるか確認します。Authorization エンドポイント へのリクエスト時にご利用サービス側で nonce を保存してから ID Token を受け取るまでの所要時間を目安として、サービスのポリシーで所要時間を決めてください。

  9. (Implicit フローまたは Hybrid フロー利用時。ユーザー認証リクエスト時に nonce を指定した場合)Authorization エンドポイント へのリクエスト時に送信した nonce の値と、ID Token で返された nonce の値が等しいことを確認します。

検証の失敗
  • 3. 〜 6. および 9. の手順のなかで検証に失敗する場合は、ID Token が改ざんされている可能性があるため認証処理を中断し、エラー処理などを行います。
  • 7. および 8. の手順で検証に失敗する場合は、ID Token の有効期限や認証時刻を超過しているため認証処理を中断し、再度ソーシャルログインをユーザー認証リクエストからやりなおします。

値の利用

ユーザーの識別には、ソーシャルPLUS ID sub または、お客様サービス側ユーザID primary_key の値を利用します。

ソーシャルログイン時に利用されたログインプロバイダ provider により発行されたユーザー識別子(たとえば LINE が発行した userId の値など)を直接取得したい場合は provider_uid から取得できます。

emailphone_number フィールドの値をユーザーの一意の識別子として使用しないでください。メールアドレスや電話番号はユーザーにより任意で変更される可能性があります。ユーザーの同意が得られない場合は、値がそのものが返されないこともあります。

関連ドキュメント