IDトークンからプロフィール情報を取得する

LINEプラットフォームは、OpenID Connect仕様に準拠するIDトークンを発行しているため、LINEプラットフォームからユーザーのプロフィール情報(ユーザーID・表示名・プロフィール画像・メールアドレス)を安全に取得できます。

所定の申請等を行った法人ユーザーは、LINE Profile+に登録された情報(氏名・性別・誕生日・電話番号・住所)も取得できます。詳しくは、「LINE Profile+に登録されている情報を取得する」を参照してください。

IDトークンを取得する

アクセストークンを取得するときに、IDトークンも取得できます。

LIFFアプリでIDトークンを取得することもできます

liff.getIDToken()を利用してIDトークンを取得することもできます。

IDトークンについて

IDトークンは、ユーザー情報を含むJSONウェブトークン(JWT)です。IDトークンは、ピリオド(.)で区切られたヘッダーペイロード、および署名から構成されます。各部分はBase64URLでエンコードされています。詳しくは、JWTの仕様を参照してください。

アプリのセキュリティを保つために、署名を使ってIDトークンを検証する必要があります。LINEプラットフォームから直接取得したIDトークンでない限り、サーバーでIDトークンを検証してください。

IDトークンを検証するには、検証のためのコードを書くか、IDトークンを検証するエンドポイントを利用してください。エンドポイントを使用してIDトークンを検証する方法について詳しくは、「IDトークンからプロフィール情報を取得する」を参照してください。

ヘッダー

ヘッダーには以下の値が含まれます。

プロパティタイプ説明
algStringIDトークンの署名アルゴリズム。ネイティブアプリやLINE SDK、LIFFアプリに対してはES256(ECDSA using P-256 and SHA-256)が、ウェブログインに対してはHS256(HMAC using SHA-256)が返されます。
typeStringペイロードの形式。JWTが返されます。
kidString公開鍵ID。algの値が ES256の場合のみヘッダーに含まれます。kidプロパティについて詳しくは、『JSON Web Key (JWK)のドキュメント』を参照してください。

以下はデコードしたヘッダー部分の例です。

algHS256の場合:

json
{
  "typ": "JWT",
  "alg": "HS256"
}

algES256の場合:

json
{
  "typ": "JWT",
  "alg": "ES256",
  "kid": "a2a459aec5b65fa..."
}

ペイロード

ユーザー情報はペイロード部分に含まれます。なお取得できる情報はメインプロフィールのみです。ユーザーのサブプロフィールは取得できません。

プロパティタイプ説明
issStringhttps://access.line.me。IDトークンの生成URLです。
subStringIDトークンの対象ユーザーID
audStringチャネルID
expNumberIDトークンの有効期限。UNIX時間(秒)で返されます。
iatNumberIDトークンの生成時間。UNIX時間(秒)で返されます。
auth_timeNumberユーザー認証時間。UNIX時間(秒)で返されます。認可リクエストにmax_ageの値を指定しなかった場合は含まれません。
nonceString認可URLに指定したnonceの値。認可リクエストにnonceの値を指定しなかった場合は含まれません。
amrStringの配列ユーザーが使用した認証方法のリスト。特定の条件下ではペイロードに含まれません。
以下のいずれかの値が含まれます。
  • pwd:メールアドレスとパスワードによるログイン
  • lineautologin:LINEによる自動ログイン(LINE SDKを使用した場合も含む)
  • lineqr:QRコードによるログイン
  • linesso:シングルサインオンによるログイン
  • mfa:2要素認証によるログイン
ユーザー認証について詳しくは、「ユーザーがユーザー認証を行う」を参照してください。また、2要素認証について詳しくは、「2要素認証を必須化する」を参照してください。
nameStringユーザーの表示名。認可リクエストにprofileスコープを指定しなかった場合は含まれません。
pictureStringユーザープロフィールの画像URL。認可リクエストにprofileスコープを指定しなかった場合は含まれません。
emailStringユーザーのメールアドレス。認可リクエストにemailスコープを指定しなかった場合は含まれません。

以下はデコードしたペイロード部分の例です。

json
{
  "iss": "https://access.line.me",
  "sub": "U1234567890abcdef1234567890abcdef",
  "aud": "1234567890",
  "exp": 1504169092,
  "iat": 1504263657,
  "nonce": "0987654asdf",
  "amr": ["pwd"],
  "name": "Taro Line",
  "picture": "https://sample_line.me/aBcdefg123456"
}

署名

署名は、Base64URLでエンコードされているヘッダー、およびペイロードをピリオドで繋げた文字列をハッシュ化した値です。IDトークンの改ざんを防止するために使用します。

ハッシュ化のアルゴリズムは、ヘッダーに含まれるalgプロパティで示されます。IDトークンの検証のために必要な鍵は、署名をハッシュ化した際のアルゴリズムごとに異なります。

アルゴリズム検証のための鍵
ES256(ECDSA using P-256 and SHA-256)JSON Web Key(JWK)ドキュメントURL』の中で、ヘッダーのkidプロパティを含む要素
HS256(HMAC using SHA-256)チャネルシークレット

IDトークンの検証について詳しくは、『OpenID Connect Core 1.0』の「ID Token Validation」を参照してください。

OpenIDプロバイダの情報は、『OpenID Provider Configuration Document』を参照してください。

IDトークンからプロフィール情報を取得する

IDトークンに含まれる情報を使用する場合、検証のためのコードを書くか、LINEログインのIDトークンを検証するエンドポイントを利用してIDトークンを検証してください。

IDトークンを検証するエンドポイントを利用する場合、アクセストークンと一緒に取得したIDトークンと、LINEログインのチャネルIDをエンドポイントに送信するだけで、IDトークンを検証し、ユーザーのプロフィール情報とメールアドレスを取得できます。

リクエストの例:

sh
curl -v -X POST 'https://api.line.me/oauth2/v2.1/verify' \
 -d 'id_token=eyJraWQiOiIxNmUwNGQ0ZTU2NzgzYTc5MmRjYjQ2ODRkOD...' \
 -d 'client_id=1234567890'

レスポンスの例:

json
{
  "iss": "https://access.line.me",
  "sub": "U1234567890abcdef1234567890abcdef",
  "aud": "1234567890",
  "exp": 1504169092,
  "iat": 1504263657,
  "nonce": "0987654asdf",
  "amr": ["pwd"],
  "name": "Taro Line",
  "picture": "https://sample_line.me/aBcdefg123456",
  "email": "taro.line@example.com"
}

詳しくは、『LINEログイン v2.1 APIリファレンス』の「IDトークンを検証する」を参照してください。