# 自動ログインに失敗した時の対応方法

# 概要

LINEログインを組み込んだウェブアプリにおいて、プライベートブラウジングが有効な場合には自動ログインに失敗することがあります。また、ユーザーの利用するOSの仕様によって、失敗する場合もあります。

# LINEアプリ上での自動ログインに失敗する場合

プライベートブラウジングが有効な場合などに、LINEアプリ上での自動ログインに失敗することがあります。ログインに失敗した場合も、codeパラメータと、stateパラメータが付与された状態でコールバックURLにリダイレクトされます。

この場合、codeパラメータは無効な値となっているため、アクセストークンは生成できません。また、stateパラメータはログインセッションと紐づく値と一致しません。

自動ログインの失敗を検知する方法と、ログイン失敗時にユーザーへ表示すべき対応例について説明します。

# LINEアプリ上での自動ログイン失敗を検知する

ユーザーに認証と認可を要求する」で説明されているstateパラメータを使用することで、自動ログインの失敗を検知できます。

LINEアプリ上でのログインに失敗した場合、コールバックURLに付与されたstateパラメータの値と、認可URLに設定していたstateパラメータの値が不一致となります。ウェブアプリでは、stateパラメータの値が不一致となった場合に、自動ログインに失敗したことを考慮して設計します。

"state"パラメータが不一致になるケース

LINEログインでは、クロスサイトリクエストフォージェリ(CSRF) (opens new window)などの第三者による攻撃によってもstateパラメータが不一致となる可能性があります。したがってstateパラメータが不一致となる要因が、自動ログインに失敗したことによるものなのか、CSRFなどの第三者による攻撃なのかの判別ができないことになります。

そのため、stateパラメータが不一致となった場合には、ユーザーが意図せず自動ログインに失敗した場合のことを考えて対応方法を検討する必要があります。

# 自動ログインに失敗していた場合

自動ログインに失敗する環境において、LINEログインに失敗したユーザーに、自動ログインが有効な認可URLで再ログインを促してしまうと、ログインに失敗し続けることになります。一度自動ログインに失敗したら、disable_auto_loginパラメータを使用し、自動ログインを無効にした認可URLで再ログインを促すことで、ログインの連続失敗を避けることができます。

推奨される対応方法は以下の2つです。

ユーザーに、ログインに失敗したことを画面上で伝え、再ログインを促す方法です。

この画面は「自動ログインに失敗した場合」に表示するため、再ログインを促す際には自動ログインを無効にする必要があります。自動ログインを無効にする場合は、以下のように認可URLのクエリパラメータでdisable_auto_loginパラメータをtrueに設定してユーザーをリダイレクトしてください。

https://access.line.me/oauth2/v2.1/authorize?disable_auto_login=true&response_type=code&client_id=1234567890&redirect_uri=https%3A%2F%2Fexample.com%2Fauth%3Fkey%3Dvalue&state=12345abcde&scope=profile%20openid&nonce=09876xyz

この画面には、LINEヘルプセンターの「Webサイトで自動ログインを試みたが失敗した (opens new window)」へのリンク(https://help.line.me/line/ios/sp?lang=ja&contentId=20020693)も併せて表示することを推奨します。

以下は、ユーザーに再ログインを促す画面例です。

ユーザーにエラーメッセージを表示する画面の例

# ユーザーを自動ログインを行わない認可URLへリダイレクトする

自動ログインに失敗したユーザーを、自動ログインを無効にした認可URLへ直接リダイレクトする方法です。ユーザーを直接リダイレクトすることで、自動ログインに失敗したことを意識させずにログイン画面を表示できます。自動ログインを無効にする場合は、以下のように認可URLのクエリパラメータでdisable_auto_loginパラメータをtrueに設定してユーザーをリダイレクトしてください。

https://access.line.me/oauth2/v2.1/authorize?disable_auto_login=true&response_type=code&client_id=1234567890&redirect_uri=https%3A%2F%2Fexample.com%2Fauth%3Fkey%3Dvalue&state=12345abcde&scope=profile%20openid&nonce=09876xyz

ユーザーに対して、リダイレクトが発生することを事前に知らせたいときは、リダイレクトメッセージを表示しても構いません。

以下は、リダイレクトメッセージを表示する画面例です。

ユーザーを自動ログインを行わない認可URLへリダイレクトする

# ユニバーサルリンクやアプリリンクが動作せずにLINEアプリが起動しない場合

外部ブラウザにおける自動ログインは、iOSのユニバーサルリンク (opens new window)やAndroidのアプリリンク (opens new window)の機能を利用しています。

外部ブラウザや特定のアプリ内のブラウザで、ユニバーサルリンクやアプリリンクが機能せず、自動ログインが動作しないことがあります。この場合、LINEアプリは起動せずメールアドレスログインの画面が外部ブラウザ上やアプリ内のブラウザ上で表示されます。これは、ユーザーが利用するOSの仕様によって起きる場合があります。OSの仕様は完全には公開されていないため、自動ログインに失敗する条件をLINEプラットフォームが回避することが難しい場合があります。

以下のような場合、ユニバーサルリンクが動作しないことがあります。

  • JavaScriptによるリダイレクトで、ユーザーを認可URLに遷移させる。
  • ユーザーがURLを入力し、認可URLに直接遷移する。

上記に注意することで、ユニバーサルリンクが動作しない問題を回避できる場合があります。例えば、ユーザーに認可URLに遷移するためのボタンをタップさせて、ログインの処理を開始するようにします。