# 3D セキュアを使用したカード保有者認証 不正利用を抑制するためにビジネスが使用する追加の認証手段である、3D セキュアについてご紹介します。 3D セキュア (3DS) は多要素認証を使用して、カードが物理的に存在しないオンライン取引の不正利用を削減します。3DS はオンライン決済フローで事業者によってトリガーされ、完了するには多要素認証 (通常、Stripe が送信する SMS またはメールベースのワンタイムパスコード) が必要です。 ## 3D セキュアフローの例 ![支払い情報が入力され、決済ボタンが含まれた Stripe の決済ページ](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-1-checkout-page.039294e0dee3a6dede8ea8a32185aae5.png) ステップ 1: 顧客がカードの詳細情報を入力します。 ![決済ボタンをクリックした後に読み込み中のアニメーションを表示するダイアログが開き、処理中という表示になっています。](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-3-challenge-flow.9052a220f336bbdb75a51799622c6477.png) ステップ 2: アクワイアラーが 3DS 認証を要求します。Stripe Issuing カードを 3DS に登録する場合、カード保有者には追加の認証ステップを完了するように促すメッセージが表示されます。 上記のように、決済時の 3D セキュアの追加手順では通常、カード保有者に対してカード発行会社の認証ページを表示し、電話またはメールに送信された確認コードを入力するように求めます。 ## 3DS が重要な理由 多くの場合、カード非提示取引でのオンライン不正利用による損失の責任はビジネスが負います。自社を守るため、ビジネスは 3DS 認証を開始して不正取引を受け付ける可能性を減らすことができます。ビジネスが 3DS 認証を開始しても、Stripe カードが 3DS に登録されている場合にのみカード保有者はこのステップを完了する必要があります。イギリスとユーロ圏では、3DS は[強力な顧客認証](https://docs.stripe.com/strong-customer-authentication.md) (SCA) の規制要件を実装するための標準です。 ## ライアビリティシフト ビジネスによって 3DS 認証が開始されると、多くの場合不正利用に対する責任はビジネスからカード発行会社に移ります。これは、Issuing カードが 3DS に登録されているかにかかわらず適用されるため、カード発行会社は追加確認を行う必要なく、増大した責任に対応できます。 ## 3DS への登録 地域に応じて、3DS 登録は任意のオプトイン方式か、必須でデフォルトで有効になっているかのどちらかです。 ### アメリカ アメリカでの 3DS 登録は任意であり、サポートに連絡して登録をリクエストしない限り、カードは 3DS に登録されません。登録により一部のカード会員取引で負担が増えますが、オンラインのカード非対面取引における取引不正利用による潜在的な損失リスクが大幅に軽減されます。取引の不正利用を管理するための [ベストプラクティス](https://docs.stripe.com/issuing/manage-fraud.md) の一環として、Issuing プログラムのライフサイクルの早い段階でカードを 3DS に登録することをお勧めします。 登録をリクエストすると、アカウントに関連付けられたすべての有効なカードが登録され、今後作成されるすべてのカードが自動的に登録されます。 電話番号もメールアドレスも登録されていないカード会員は、3DS に登録されません。登録をリクエストした後、[Cardholder オブジェクト](https://docs.stripe.com/api/issuing/cardholders/object.md)に連絡先情報を追加してカードを登録します。逆に、カード会員の連絡先情報を削除すると、カードの 3DS 登録が解除されます。 カード保有者の電話番号やメールアドレスを更新すると、連絡先情報が更新されたカードが自動的に再登録されます。カードを手動で再登録する必要はありません。 ### イギリスおよび EU 現地の規制により、作成後、カードはデフォルトで 3DS に登録されます。3DS で SCA を実装し、現地の規制に準拠するには、EU とイギリスで発行されたすべてのカードで、該当する[カード会員](https://docs.stripe.com/api.md#create_issuing_cardholder)の有効な電話番号が登録されている必要があります。 カード保有者の電話番号やメールアドレスを更新すると、連絡先情報が更新されたカードが自動的に再登録されます。カードを手動で再登録する必要はありません。 ## 3D セキュアによる認証 [cardholder (カード保有者)](https://docs.stripe.com/api.md#create_issuing_cardholder) に対する 3DS 認証リクエストが届くと、Stripe は 1 回限りの確認コードを含むショートメッセージまたはメールをカード保有者に送信します。 認証の方法は、カード保有者が提供した連絡先情報によって異なります。Stripe Issuing が対応しているイギリスとユーロ圏の市場では、1 回限りのショートメッセージの確認コードで認証するために、カード保有者は電話番号を登録する必要があります。アメリカでは、登録された電話番号やメールアドレスはカード保有者の認証に使用されますが、両方とも提供されている場合、認証には電話番号が使用されます。どちらか一方の場合は、利用可能な連絡先情報が認証リクエストで使用されます。お客様とカード保有者を最大限に保護するために、カード保有者の電話番号とメールアドレスを最新の状態に維持することをお勧めします。これにより、認証時に Stripe からカード保有者に連絡できます。カード保有者情報は、API またはダッシュボードから、フィールドを新しい値に変更することで更新できます。 イギリスと EU では、カード保有者にセキュリティに関する追加の質問が表示されます。カード保有者には、カードの取引リストが表示され、そこから当てはまる取引を選択できます。カード保有者が初めてカードを使用する場合は、提示された取引のいずれも当てはまらないという選択肢を選ぶ必要があります。 ![セキュリティ質問のサンプルを示すダイアログです。決済履歴の選択肢があります。ヘッダーには YourBank と Card Network のプレースホルダーロゴがあります。セキュリティ質問には、「次のリストから、このカードを使用して最近行った支払いを特定してください」と記載されています。支払いがオンラインかどうか、購入金額、加盟店名の支払い情報に関する 5 つの選択肢があります。最後の選択肢には、「上記のいずれも該当しない」と表示されています。一番下に「確認」というボタンがあります。](https://b.stripecdn.com/docs-statics-srv/assets/3ds-issuing-knowledge-factor-netcetera.37258cc6c8e63cadf3dbb9b22f94d786.png) カード保有者に提示される取引リスト。 ## 3D セキュアの言語を選択する Cardholder オブジェクトの [preferred_locales](https://docs.stripe.com/api/issuing/cardholders/object.md#issuing_cardholder_object-preferred_locales) フィールドによって、3DS フローの表示言語が決定します。3DS のデフォルト言語は英語です。 カード保有者用に 3DS の言語を選択するには、API を使用して、`preferred_locales` を利用言語の優先順の配列に設定します。必要に応じて、言語を 1 つのみ提供することもできます。対応している言語は、英語 (`en`)、フランス語 (`fr`)、ドイツ語 (`de`)、イタリア語 (`it`)、スペイン語 (`es`) です。 ```curl curl https://api.stripe.com/v1/issuing/cardholders \ -u "<>:" \ -d type=individual \ -d "name=Jane D. Rocket" \ --data-urlencode "email=jane@example.com" \ -d "preferred_locales[]=fr" \ -d "preferred_locales[]=en" \ -d "billing[address][line1]=1234 Main Street" \ -d "billing[address][city]=San Francisco" \ -d "billing[address][state]=CA" \ -d "billing[address][country]=US" \ -d "billing[address][postal_code]=94111" ``` アメリカでは、Stripe はネイティブ iOS および Android アプリケーションによる認証にも対応しています。この機能を使用するには、[サポートにお問い合わせください](https://support.stripe.com/contact)。 使用する認証方法にかかわらず、カード保有者が短い期間内に 3 回続けて 3DS の試行に失敗すると、カードでの 3DS が 60 分間無効になります。 ## 免除 特定のタイプの低リスクの支払いは、SCA から免除される場合があります。免除では、顧客の認証頻度を減らすことで、リスクの低い支払いの負担を抑えます。Stripe はデフォルトで 3DS の対象カードに対する以下の免除を要求し、低リスクまたは低価値と判断した取引に関連する負担を抑えます。 | タイプ | 意味 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | transaction_risk_analysis (アメリカのみ) | カード発行会社 (Stripe など) はリアルタイムのリスク分析を実行して、取引に低リスクによる免除を要求するかどうかを判断します。 | | low_value_transaction | 30 GBP または EUR (あるいは相当換算額) 未満の取引は「小額」とみなされ、SCA が免除されます。カード保有者が最後に認証に成功してから 5 回免除が適用された場合、またはこれまで免除された支払いの合計額が 100 GBP または EUR を超えた場合は、免除が適用されず、カード保有者を認証する必要があります。 | アクワイアラーも免除をリクエストでき、Stripe は状況に応じてそれを認めます。このようなシナリオでは、損失に対する責任は引き続きアクワイアラーにあり、カード発行会社に移行しません。 カード発行会社が要求する免除が適用されると、[Authorization オブジェクト](https://docs.stripe.com/api/issuing/authorizations.md)は次のようになります。 ```json { "object": "issuing.authorization", ..."verification_data" : { ... "authentication_exemption": { "type": "low_value_transaction", "claimed_by": "issuer" }, ... }, ... } ``` 一方、アクワイアラーが要求する免除が適用されると、[Authorization オブジェクト](https://docs.stripe.com/api/issuing/authorizations.md)は次のようになります。 ```json { "object": "issuing.authorization", ..."verification_data" : { ... "authentication_exemption": { "type": "low_value_transaction", "claimed_by": "acquirer" }, ... }, ... } ``` イギリスまたはユーロ圏を拠点としていて、ユースケースでバーチャルカードのみを必要とする場合は、Stripe サポートにお問い合わせいただき、Secure Corporate Payment (SCP) 免除がプログラムに該当するかを相談できます。 ## 3DS による不正利用の管理 Stripe は API を通じた 3DS の試行に関する詳細を認証エンドポイントに含めます。[verification_data](https://docs.stripe.com/api/issuing/authorizations/object.md#issuing_authorization_object-verification_data) ハッシュの `three_d_secure` ハッシュを使用して、オーソリが正常に認証されたかどうかを特定します。自社の認証ロジックを維持している場合、これらの値をキー入力として使用してオーソリを許可するか拒否するかを判断することをお勧めします。 また、ビジネスが 3DS を試行していない場合、`three_d_secure` フィールドは null になります。3DS が免除されている場合、`authentication_exemption` が存在し、`three_d_secure` フィールドは null になります。オーソリに `three_d_secure` と `authentication_exemption` を両方含めることはできません。 認証に失敗した場合、不正利用取引から保護するために、Stripe は自動的にオーソリを拒否します。ご対応は不要です。 以下の表では、各値が表す内容と、不正利用を抑えるための使用方法に関するガイドラインを確認できます。 | 結果 | 意味 | 推奨されるアクション | | -------------------- | ------------------------------------------------------------------------------ | ------------------------------- | | attempt_acknowledged | ビジネスがオーソリを認証しようとしましたが、カードが登録されていないか、Stripe にアクセスできませんでした。 | オーソリが不正であるかどうかを判断するための証拠が不十分です。 | | authenticated | 買い物客が携帯電話に送信された正しい確認コードを入力したため、カード保有者として正常に確認されました。オンライン購入は合法であり、不正ではありませんでした。 | 取引を承認します。 | | 必須 | オーソリが拒否されました。規制要件により、この取引には認証が義務付けられていますが、加盟店から適切に提出されておらず、適用可能な免除も申請されていません。 | 取引を拒否します。 | ## 3DS をテストする 3D セキュアの機能をテストするには、Checkout Sessions API を使用します。 このレスポンスには、Stripe がホストする決済ページへの URL が含まれており、発行されたカード詳細を入力して決済を試みることができます。 3DS テストは本番環境でのみ使用できます。次の例では、API キーを本番環境の API キーに置き換えます。 ### Checkout セッションを作成する Checkout セッションで 3D セキュアを手動でトリガーするには、リクエストで [payment_method_options[カード][request_three_d_secure]](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_three_d_secure) を `challenge` または `any` に設定します。 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=3DS test" \ -d "line_items[0][price_data][unit_amount]=1000" \ -d "line_items[0][quantity]=1" \ -d "payment_method_options[card][request_three_d_secure]=challenge" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/success?session_id={CHECKOUT_SESSION_ID}" ``` これはCheckout セッションを作成し、Stripe がホストする決済ページへの URL を含むレスポンスを返します。この URL はどのブラウザからもアクセスできます。発行されたカード情報を入力して決済を試みると、3DSチャレンジが開始されます。 ```json { "id": "cs_live_...", "object": "checkout.session", "payment_method_options": { "card": { "request_three_d_secure": "challenge" } }, ..."url": "https://checkout.stripe.com/c/pay/cs_live_...", ... } ``` `request_three_d_secure` を `challenge` に設定しても、3DS チャレンジは保証されません。チャレンジが発生しない場合は、`unit_amount` を増やして別の購入をお試しください。