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

# 概要

LINEログインを組み込んだウェブアプリにおいて、プライベートブラウジングが有効な場合には自動ログインに失敗することがあります。

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

# 自動ログイン失敗の検知

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

自動ログインに失敗した場合、ウェブアプリのコールバックURLには無効なcodestateパラメータが付与された状態でリダイレクトされます。 この時、コールバック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へリダイレクトする