先日、ライブの帰りに新横浜〜東京間で新幹線を使おうと思ったら、EX予約のきっぷ発券手続きがあまりに面倒すぎて大変でした。
これ、知人でもハマっている人が複数いまして、例えば
などの場合は同様の罠にハマると思います。
今回の私がたどった発券フローは以下の通り。
flowchart TD classDef redblock fill:#ee7800,font-weight:bold; A[EXアプリに指紋認証でログイン] --> B[EXアプリ上で受取QRコード用ワンタイムパスワード発行]:::redblock --> C[登録メールアドレスでワンタイムパスワード受信]:::redblock --> D[EXアプリにワンタイムパスワード入力]:::redblock --> E[アプリに表示されたQRコードを券売機に読み取り] --> F[券売機にEX予約パスワード入力]:::redblock --> G[発券]
いやいや一体何回認証させんの?!特にオレンジの部分の意図が分からず、かなりイライラしました。
しかもEX予約パスワードは発券機の大画面で丸見えの中入力しないといけない。
EX予約の認証、複数人だとクソすぎる。
— mhl@元南CA移民→次は北CAへ (@mhl_bluewind) 2021年12月28日
・登録したSuicaでは発券できない
・QRコード認証だけどQRコードを出すのにWebサイト上でログイン必須
・さらにログイン後QRコード発行にワンタイムパスワード
・QRコード読み取らせたら衆人環視のもとWebのパスワード入力 pic.twitter.com/GKjdlbDbEq
さらにさらに、この複雑なステップを新幹線発車時刻が迫って焦る中やる…だと…?
どうしてこうなった
ここからは私の想像ですが、個々の認証が必要となる場面は何となく分かるんですよね…
ケース①
受取用QRコードに必要なワンタイムパスワードは、EX予約パスワードが流出して不正ログインされたときに、不正発券を防ぐのに必要。
EXアプリの指紋認証は何なの?
さらに混乱するのは、EXアプリに指紋認証を設定していても、発券フローは何も変わらないということ。何で、指紋認証よりも強度の低いワンタイムパスワードとパスワード認証を繰り返させられるんだ…?とだいぶ混乱しました。
恐らく、JR東海としてはEXアプリの指紋認証はアプリ画面に入るかどうかのただの画面ロックで、本人確認の意図はない、ということかと。確かに、これがただの画面ロックの機能しかないとするなら、流出したEX予約アカウントを用いてEXアプリにログインされたら本人確認にはならないので、これも理屈としては分かります。
ただ、昨今の指紋認証での安全なログインに慣れた身からすると、指紋認証からのパスワード入力×2は日常動作に反するので、かなり不安になりました。加えて、普段、指紋認証にしていると一切使うことのないパスワードを、本番でいきなり思い出さなければならないのもかなり❌ですね…
現在の発券フロー
せっかくなので現在の発券フローを描いてみました.
flowchart TD
classDef start fill:blue,font-weight:bold,color:white;
subgraph EXアプリ
applogin[EXアプリにログイン\n(パスワード)]:::start
--> appotp[EXアプリ上で受取QRコード用\nワンタイムパスワード発行]
--> appotprec[登録メールアドレスでワンタイムパスワード受信]
--> appotp2[EXアプリにワンタイムパスワード入力]
applogin2[EXアプリにログイン\n(指紋認証) ]:::start
--> appotp
end
appotp2
--> qrget(受取QRコード入手)
-->|数日間有効| machineqr[QRコードを券売機に読み取り]
subgraph web
weblogin[EX予約にログイン]:::start
--> webotp[EX予約上で受取QRコード用\nワンタイムパスワード発行]
--> webotprec[登録メールアドレスでワンタイムパスワード受信]
--> webotp2[EX予約にワンタイムパスワード入力]
end
webotp2 --> qrget
subgraph 旅行当日-駅券売機
machineqr
--> machinepasswd[券売機にEX予約パスワード入力]
--> ticketing[発券]
exiccard[EXICカードをタッチ]:::start
--> machinepasswd
end私が知らないだけで本当はもっとあるかもしれませんが・・・。EX-ICカードを使うと、QRコード発券までのワンタイムパスワード周りを回避できますが、まだ最後にパスワード認証があるのがやはりアレですね。
改善案:アプリ側で認証させる
ここからは改善案です:
EX予約アプリにパスキー or 生体認証によるデバイス認証の機能をつけ、これで認証した者は以後のワンタイムパスワードとQRコード読み込み後のEX予約パスワードをスキップする。
flowchart TD
classDef redblock fill:#ee7800,font-weight:bold;
A{EXアプリに登録済み\n生体認証でログインした?}
-->|NO| B[EXアプリ上で受取QR用ワンタイムパスワード発行]:::redblock
subgraph 旧フロー
B
--> C[登録メールアドレスでワンタイムパスワード受信]:::redblock
--> D[EXアプリにワンタイムパスワード入力]:::redblock
--> E[アプリに表示されたQRコードを券売機に読み取り]
--> F[券売機にEX予約パスワード入力]:::redblock
end
F --> G[発券]
A -->|YES| E2[アプリに表示されたQRコードを券売機に読み取り] --> Gネット銀行の「スマホでATM」に近いフローです。
こうすれば、ワンタイムパスワード云々は初回のパスキーor生体認証をEX予約に登録する時点だけで済みます。お家でゆっくりやれるので、券売機の前で発車時刻とにらめっこして焦る必要もありません。
一点、現在の受取QRコードの有効期間が数日あるのに対して、新しいのアプリ認証は駅の券売機の前で行うことを想定しているので、有効期間は数分程度にする必要があります。つまり、券売機から見ると、有効期間の違うQRコードが混在するわけで、ここが実装上煩雑かもしれません。
オマケ:旅行代理店を通した場合
気になったので、EX予約以外の旅行代理店経由のQRコード発券はどうなっているのかと調べてみました。
www.jtb.co.jp
flowchart TD
classDef redblock fill:#ee7800,font-weight:bold;
subgraph EX予約のフロー
B[EXアプリ上で受取QR用ワンタイムパスワード発行]:::redblock
--> C[登録メールアドレスでワンタイムパスワード受信]:::redblock
--> D[EXアプリにワンタイムパスワード入力]:::redblock
--> E[アプリに表示されたQRコードを券売機に読み取り]
--> F[券売機にEX予約パスワード入力]:::redblock
end
F --> G[発券]
A[旅行代理店がQRコードを発行] --> E2[QRコードを券売機に読み取り] --> GなんでEX予約より簡単なんだ・・・???