エクスプレス予約のきっぷ発券手続きが面倒すぎる件

先日、ライブの帰りに新横浜〜東京間で新幹線を使おうと思ったら、EX予約のきっぷ発券手続きがあまりに面倒すぎて大変でした。

これ、知人でもハマっている人が複数いまして、例えば

  • 乗車券は別に持ちたい(特定都区市内制度を使いたい等)ので、特急券だけEX予約した人
  • 小学生未満の子供などSuicaを持たない同行者がいる旅行

などの場合は同様の罠にハマると思います。

今回の私がたどった発券フローは以下の通り。

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予約パスワードは発券機の大画面で丸見えの中入力しないといけない。

さらにさらに、この複雑なステップを新幹線発車時刻が迫って焦る中やる…だと…?

どうしてこうなった

ここからは私の想像ですが、個々の認証が必要となる場面は何となく分かるんですよね…

ケース①

受取用QRコードに必要なワンタイムパスワードは、EX予約パスワードが流出して不正ログインされたときに、不正発券を防ぐのに必要。

ケース②

QRコード読み込み後のEX予約パスワードは、旅行代理店から発行された発券用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予約より簡単なんだ・・・???

オマケ2: えきねっとは?

どうもQRコード周りのセキュリティは、EX予約がとりわけ厳しい模様。対して、JR東日本の「えきねっと」は、上の旅行代理店の場合と同様、QRコードだけで発券可能。QRコードもきっぷ予約時にメール本文に直に送られてくる。