# アプリとサーバーの間で安全なログインプロセスを構築する
このページでは、安全なユーザー登録およびログインプロセスの概念を説明しています。LINE SDKを使用してネイティブアプリにLINEログインを実装する際に参考にしてください。
# 安全に送受信できる情報について
ユーザーがLINEログイン経由でアプリにログインすると、アプリとサーバーは、以下のような情報をLINEプラットフォームから取得して互いに送受信できます。
- ❌ ユーザーのプロフィール情報
- ❌ チャネルID
しかし、このような情報は、なりすましやその他の攻撃に対して脆弱です。たとえば、アプリが送信した情報を、サーバーが盲目的に信頼することは非常に危険です。代わりに、以下の情報をサーバーに送信してください。
- ✅ アクセストークン
- ✅ IDトークン
これらのトークンを使うと、サーバーは信頼できる情報をLINEプラットフォームから直接取得できます。
ここでは、LINE SDKを使用する上で私たちがおすすめする設計の概念を説明しています。 このとおりに設計しなければならないということではありません。 危険性を十分に理解したうえで、安全なシステムを構築してください。
# アクセストークンを使用して新規ユーザーを登録する
新規ユーザーがLINEログインを使用してアプリにログインする場合は、LINEに登録されたプロフィール情報を使用して、サーバーのデータベースに新しいユーザーを登録できます。
このとき、以下のように、アプリからユーザーのプロフィール情報をサーバーに直接送信すると、攻撃に対して脆弱になります。
以下の例では、ユーザー登録およびログインプロセスの潜在的な脆弱性を強調しています。
プロフィール情報の代わりに、アクセストークンをアプリからサーバーに送信します。 サーバーではアクセストークンを検証し、LINEプラットフォームからユーザーのプロフィール情報を直接取得してください。
図に示したAPIについて詳しくは、『LINEログイン v2.1 APIリファレンス』の以下の項目を参照してください。
LINEログインAPIによるアクセストークンの検証に成功すると、レスポンスにはclient_id
プロパティ(チャネルID)とexpires_in
プロパティ(アクセストークンの有効期間)が含まれます。アクセストークンを使用する前に、各プロパティが以下の条件を満たすことを確認してください。
プロパティ | 条件 |
---|---|
client_id | アプリにリンクされているLINEログインチャネルのチャネルIDと同じ |
expires_in | 正の値 |
# OpenIDを使用して新規ユーザーを登録する
アプリがOpenID Connect (opens new window)をサポートしている場合は、アクセストークンを確認する必要はありません。代わりに、アプリからIDトークンをサーバーに送信します。サーバーでは、LINEプラットフォームが提供するエンドポイントを使用してIDトークンを検証し、プロフィール情報を取得してください。
nonceは、各ログイン試行を一意に識別するために使用します。ランダムな値を発行してください。 nonceを正しく使うことで、リプレイ攻撃 (opens new window)を防ぐことができます。
図に示したAPIについて詳しくは、『LINEログインAPIリファレンス』の以下の項目を参照してください。
なお、サーバーでIDトークンとnonceを正しく処理する方法について詳しくは、以下の項目を参照してください。
- IDトークンを使ってユーザーを識別する (LINE SDK for iOS Swift)
- IDトークンを使ってユーザーを識別する (LINE SDK for Android)
# 次のステップ
このページでは、安全なユーザー登録およびログインプロセスを設計する方法の概念を説明しました。LINE SDKを使用して、LINEログインをアプリに組み込む手順について詳しくは、以下の項目を参照してください。
- LINE SDK for iOS Swift:
- LINE SDK for Android: