こんにちは。
LINEが提供するOAuth 2.0の認可コード付与のフローとOpenID Connectに準拠する
Webログインの仕組みであるLINEログインで提供される、
"自動ログイン"と呼ばれるユーザーに違和感を与えにくいWebログインの
仕組みについて解説したいと思います。
自動ログインとは
この動作のことです。
※外部ブラウザにおける自動ログイン
この動作の何がいいか
以下のようなメールアドレス、パスワードの入力をスキップでき、
ユーザーの離脱を防止できる点がCOOLです。
何が問題なのか
自動ログインは、LINEのアプリ内ブラウザ、もしくは外部ブラウザ(iOSであればSafari、AndroidであればChrome)のみに対応しており、また外部ブラウザではシングル・サインオン(SSO)と呼ばれる仕組みにより、
毎回自動ログインを行わせることができないという問題があります。
https://developers.line.biz/ja/faq/#how-does-auto-login-work
https://developers.line.biz/ja/docs/line-login/integrate-line-login/#line-auto-login
SSOとは
以下のような画面のことです。
外部ブラウザでは、 (自分の管理していないチャネルでの)自動ログインを含めて一度でもLINEログインを行い、
LINEログインのセッション情報(Cookie)が残っている場合、自動ログインよりも
優先してSSOが動作する ことが明記されてます。
https://developers.line.biz/ja/docs/line-login/integrate-line-login/#line-sso-login
SSOを動作させないためには
SSO機能は無効にできないようなので、
どのような場合においでもSSOを動作させたくないということであれば、
LINEログインをLINEアプリ内ブラウザで行うしか方法はありません。
ただし、少なくとも自分の管理しているLINEログインの導線のみを
利用するユーザーに対しては、外部ブラウザでのSSOを無効化する方法があります。
ワークアラウンド
"max_age"を0にすることで、LINEログインのCookieの有効期限を0にすることができるため、
これを用いてSSOを無効化することができる場合があります。
max_ageについては以下のドキュメントに記載があります。
ユーザー認証後に許容される最大経過時間(秒)。OpenID Connect Core 1.0 の「Authentication Request」のセクションで定義されているmax_ageパラメータに相当します。
OPTIONAL. Maximum Authentication Age. Specifies the allowable elapsed time in seconds since the last time the End-User was actively authenticated by the OP. If the elapsed time is greater than this value, the OP MUST attempt to actively re-authenticate the End-User. (The max_age request parameter corresponds to the OpenID 2.0 PAPE [OpenID.PAPE] max_auth_age request parameter.) When max_age is used, the ID Token returned MUST include an auth_time Claim Value.
注意点として、max_ageを0にした場合でも、LINEログインを行うユーザーが他のLINEログインチャネルに対してすでにLINEログインを行っており、そのCookieが残っている場合、このパラメータを利用してもSSOを無効化することはできません。
ユーザーがmax_ageを0ではないLINEログインを行う可能性があるため、
この方法ではどのような場合においても確実にSSOを無効化できるわけではありませんが、
より多くのユーザーが外部ブラウザで自動ログインを行われるように対応するという意味では、
検討の余地もあるのではないでしょうか。
おまけ
LINEログインをパラメーターを変えて試すことができるテストアプリ作りました。
よかったらmax_ageを0にして動作を確認してみてください。
https://myucy-login.herokuapp.com/
※上記アプリでの情報の取得や保存はしていないのでご安心ください。
またherokuなのでしばらくアクセスが無いと起動に時間がかかります。