Q&A

LINEログインで"auth_time"が返ってこなかったり、返ってきても過去日となるケースがあるのはなぜですか?

前提情報

https://developers.line.biz/ja/reference/line-login/#verify-id-token-response https://developers.line.biz/ja/reference/line-login/#verify-id-token-response

auth_time ユーザー認証時間。UNIXタイムです。認可リクエストにmax_ageの値を指定しなかった場合は含まれません。

発生している問題

認可リクエストに一律でmax_ageを指定して認可レスポンスを取得していますが、ごく稀に"auth_time"自体が含まれていなかったり、含まれていても過去日だったりします。 これが発生する条件と回避する方法をご存知の方はご教授いただけないでしょうか?

>含まれていなかったり  (略)

>含まれていても過去日 'auth_time' => 1609118473 (2020/12/28 10:21:13)

'auth_time' => 1613798043 (2021/02/20 14:14:03)

'auth_time' => 1625816538 (2021/07/09 16:42:18)

いずれも2021/08/14~8/15にかけて確認した実際の値です。 ざっと1,000件に2-3件程度の発生頻度でしょうか。

試したこと

暫定で、外部サービス側で、これが受け取れなかったり過去日だった場合には自前でこれを"expires_in"とあわせて未来日となるように変更して回避できないかと考えていますが、LINEへの影響が分からずにいます。 単にmax_ageを相当長い期間で指定するようにして、相対的にカバーするような方法にすればよいのでしょうか?

補足情報

LINEログインv2.1

  • 0
  • 4
  • 1380
  • twitter facebook

ご教授ありがとうございます。

max_age(≒auth_time)の評価をやめて回避しまして、おかげで以降は問題なく動くようになりました。 ありがとうございました。

  • 0

RPのサービス要件次第だと思いますが、再認証が必要ないのであればmax_ageは不要かとおもいます。 反対に再認証が必要となるユースケースとは、ECサイトで商品購入時の再認証だったりするようです。

よくECサイトでの商品購入確定前にパスワード確認を行うなどといったことがあるが、そういった要件をID連携時にも満たせるように「10秒以内にログインしてなければ明示的にパスワードを聞いてくれ」といった要求を可能にしているのが、このauth_time(とそれを要求するためにAuthorization Requestに含めるmax_ageリクエストパラメーター)である。 https://www.buildinsider.net/enterprise/openid/connect

  • 1

ご教授ありがとうございます。

そうしますと、基本的なことかもしれませんが、auth_time自体は認証サーバーから返却される値ではあっても、IDトークンが正しく取得できていればLINEログイン上は問題ないので、アプリ側で特に制御しないのであればmax_age自体をつけなければよい(つまりauth_timeを評価しなければよい)ということでしょうか?

http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html max_age

OPTIONAL. Authentication Age の最大値. End-User が OP によって明示的に認証されてからの経過時間の最大許容値 (秒). もし経過時間がこの値より大きい場合, OP は End-User を明示的に再認証しなければならない (MUST). (max_age リクエストパラメータは OpenID 2.0 PAPE [OpenID.PAPE] の max_auth_age リクエストパラメータに相当する) max_age が指定された場合, 発行される ID Token は auth_time Claim を含まねばならない (MUST).

  • 0

auth_time は user が認証を行った日時が返ってくるので、基本的には過去の日付になると思います。 またこちらは optional となっていてリクエスト次第では null になるようです。

auth_time Time when the End-User authentication occurred. Its value is a JSON number representing the number of seconds from 1970-01-01T0:0:0Z as measured in UTC until the date/time. When a max_age request is made or when auth_time is requested as an Essential Claim, then this Claim is REQUIRED; otherwise, its inclusion is OPTIONAL. (The auth_time Claim semantically corresponds to the OpenID 2.0 PAPE [OpenID.PAPE] auth_time response parameter.) https://openid.net/specs/openid-connect-core-1_0.html

日本語の記事ですとこちらが参考になります。 https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06#76-auth_time-%E3%82%AF%E3%83%AC%E3%83%BC%E3%83%A0

  • 1

関連する質問

    関連する質問はありません

本当によろしいですか? question.vm