はじめに
2025年3月に3DSが日本で強要されるようになるので、Stripe を使っている開発者として、最低限の知識・理解を身につけたい!
なので、以下の資料をお元にメモを書いた:
3DS とは
- クリエジットカードの不正利用を防ぐための仕組み
- カード会社/銀行、ビジネス、決済サービスにより設けられる
- 動き方:カードで支払いする際、決済サービスがカード会社/銀行に問い合わせして、その回答によってユーザに対して追加の認証を求める(例:ワンタイムパスワードの入力)
3DS (カード会社/銀行への問い合わせ+それに伴うユーザに対する追加認証要求)はいつ起きる?タイミングはどう決まる?
タイミングを影響する3つに登場人物が関係する
- 行政(のルール)
- 最低限を定めている
- 決済サービス (Stripe)
- 行政の最低限に加え、3DS を自ら起こすタイミングを条件を公開している
- [stripe] 基本的に全ての取引
- 免除してくれる例外
- 行政の最低限に加え、3DS を自ら起こすタイミングを条件を公開している
- カード会社/銀行
- 3DS をいつ起こすかが各会社/銀行の判断基準によるため、不透明
上記に踏まえ、Stripe の免除条件に合わせようとしても、結局カード会社/銀行の都合でいつでも強要される可能性あり。
機能・メリット
- 当然の不正利用防止
- 不正利用が発生した場合、被害者への返金の責任が、ビジネスからカード会社/銀行に移動
3DS1、3DS2 の違い
2 の方が、決済サービスがカード会社/銀行に遅れる情報の量はい多い。
おかげで、「追加認証が不要」の判定の率が上がり、決済がよりスムーズになる
また、スマホの機能をより駆使できる
- 例えばスマホのアプリにて追加認証ができる
- リダイレクトの頻度が下がる
国によって強要される、されない
EU 、シンガポール、などでは強要されるが、免除できる例外がある
ただ、免除してもらうと、被害者への返金の責任が、ビジネスからカード会社/銀行に移動しなくなる!
日本は2025年3月から、EU 達と同様になる
アメリカがゆるい
Stripe での 3DS
免除される場面、その条件:
CIT (ユーザが画面で操作している)
★ 決済時、以下の全てを満たせベ、3DSが免除される
- 登録時に、SetupIntent を
usage=on_session
で作成する - 登録時3DS を強要 (SetupIntent を
payment_method_options.card.request_three_d_secure=challenge
で作成する) - 決済時に以下の2つ以上を実施すること
- 海外からの攻撃が非常に多いため、「不審な IP アドレスからのアクセス制限」を行う。
- 複数の連続ログイン失敗時にアカウントロック
- 不正ログインをされた場合でも、会員本人に気づきを与えられるように、二要素認証などによる本人確認を行う。
- ログイン時にユーザにメールやSMSで通知
- 下認証、瞳認証などの手段
MIT (ユーザがいない、 バッチ(?)でやるサブスク用の定期決済など)
前提:カード登録時に、SetupIntent を usage=on_session
で作成する
- 決済の基となる契約、サービス内容への変更がある場合
- 最初の決済は CIT であること
- その決済にて 3DS を強要する (PaymentIntent をpayment_method_options.card.request_three_d_secure=challenge
で作成する)