# IDトークンからプロフィール情報を取得する
LINEプラットフォームは、OpenID Connect (opens new window)仕様に準拠するIDトークンを発行しているため、LINEプラットフォームからユーザーのプロフィール情報(ユーザーID・表示名・プロフィール画像・メールアドレス)を安全に取得できます。
所定の申請等を行った法人ユーザーは、LINE Profile+に登録された情報(氏名・性別・誕生日・電話番号・住所)も取得できます。詳しくは、「LINE Profile+に登録されている情報を取得する」を参照してください。
# IDトークンを取得する
アクセストークンを取得するときに、IDトークンも取得できます。
liff.getIDToken()を利用してIDトークンを取得することもできます。
# IDトークンについて
IDトークンは、ユーザー情報を含むJSONウェブトークン(JWT)です。IDトークンは、ピリオド(.)で区切られたヘッダー、ペイロード、および署名から構成されます。各部分はBase64URLでエンコードされています。詳しくは、JWTの仕様 (opens new window)を参照してください。
アプリのセキュリティを保つために、署名を使ってIDトークンを検証する必要があります。LINEプラットフォームから直接取得したIDトークンでない限り、サーバーでIDトークンを検証してください。
IDトークンを検証するには、検証のためのコードを書くか、IDトークンを検証するエンドポイントを利用してください。エンドポイントを使用してIDトークンを検証する方法について詳しくは、「IDトークンからプロフィール情報を取得する」を参照してください。
# ヘッダー
ヘッダーには以下の値が含まれます。
プロパティ | タイプ | 説明 |
---|---|---|
alg | String | IDトークンの署名アルゴリズム。ネイティブアプリやLINE SDK、LIFFアプリに対してはES256 (ECDSA using P-256 and SHA-256)が、ウェブログインに対してはHS256 (HMAC using SHA-256)が返されます。 |
type | String | ペイロードの形式。JWT が返されます。 |
kid | String | 公開鍵ID。alg の値が ES256 の場合のみヘッダーに含まれます。kid プロパティについて詳しくは、『JSON Web Key (JWK)のドキュメント (opens new window)』を参照してください。 |
以下はデコードしたヘッダー部分の例です。
alg
がHS256
の場合:
{
"typ": "JWT",
"alg": "HS256"
}
alg
がES256
の場合:
{
"typ": "JWT",
"alg": "ES256",
"kid": "a2a459aec5b65fa..."
}
# ペイロード
ユーザー情報はペイロード部分に含まれます。
プロパティ | タイプ | 説明 |
---|---|---|
iss | String | https://access.line.me 。IDトークンの生成URLです。 |
sub | String | IDトークンの対象ユーザーID |
aud | String | チャネルID |
exp | Number | IDトークンの有効期限(UNIXタイム) |
iat | Number | IDトークンの生成時間(UNIXタイム) |
auth_time | Number | ユーザー認証時間(UNIXタイム)。認可リクエストにmax_age の値を指定しなかった場合は含まれません。 |
nonce | String | 認可URLに指定したnonce の値。認可リクエストにnonce の値を指定しなかった場合は含まれません。 |
amr | Stringの配列 | ユーザーが使用した認証方法のリスト。特定の条件下ではペイロードに含まれません。 以下のいずれかの値が含まれます。それぞれの認証方法については「ユーザーがユーザー認証を行う」を参照してください。
|
name | String | ユーザーの表示名。認可リクエストにprofile スコープを指定しなかった場合は含まれません。 |
picture | String | ユーザープロフィールの画像URL。認可リクエストにprofile スコープを指定しなかった場合は含まれません。 |
email | String | ユーザーのメールアドレス。認可リクエストにemail スコープを指定しなかった場合は含まれません。 |
以下はデコードしたペイロード部分の例です。
{
"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 (opens new window)』の中で、ヘッダーのkid プロパティを含む要素 |
HS256 (HMAC using SHA-256) | チャネルシークレット |
IDトークンの検証について詳しくは、『OpenID Connect Core 1.0』の「ID Token Validation (opens new window)」を参照してください。
OpenIDプロバイダの情報は、『OpenID Provider Configuration Document (opens new window)』を参照してください。
# IDトークンからプロフィール情報を取得する
IDトークンに含まれる情報を使用する場合、検証のためのコードを書くか、LINEログインのIDトークンを検証するエンドポイントを利用してIDトークンを検証してください。
IDトークンを検証するエンドポイントを利用する場合、アクセストークンと一緒に取得したIDトークンと、LINEログインのチャネルIDをエンドポイントに送信するだけで、IDトークンを検証し、ユーザーのプロフィール情報とメールアドレスを取得できます。
リクエストの例:
curl -v -X POST 'https://api.line.me/oauth2/v2.1/verify' \
-d 'id_token=eyJraWQiOiIxNmUwNGQ0ZTU2NzgzYTc5MmRjYjQ2ODRkOD...' \
-d 'client_id=1234567890'
レスポンスの例:
{
"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トークンを検証する」を参照してください。