パスワードなしのログイン
パスワードなしのログインとは、パスワードを使わずに買い物客の本人確認を行う方法です。この方法により、フィッシングや総当たりパスワードクラッキングなどのサイバー攻撃から保護できます。パスワードなしのログインシステムでは、マジックリンク、ワンタイムコードなど、通常のパスワードよりセキュアな認証メソッドを採用しています。
このガイドでは、Shopper Login and API Access Service (SLAS) を使用して、Web サイトまたはアプリにパスワードなしのログインを実装する方法を学びます。
このページ内のリンクには、既存のお客様のみがアクセスできるものがあります。Commerce Cloud リポジトリにアクセスする方法については Salesforce Commerce Cloud GitHub リポジトリとアクセスを参照してください。
SLAS パスワードなしのログイントークンは 10 分後に期限切れになります。
概要
SLAS を使用したパスワードなしのログインの仕組みを理解するために、まずはプロセスの概要を見ていきます。
買い物客は、既存の B2C Commerce またはサードパーティの IDP アカウントをもっている必要があります。また、パスワードなしのログインを使用する前に、ユーザー名とパスワードでログインしておく必要があります。

- 買い物客がアプリを開いてログインします。
- 買い物客がパスワードなしのログインをリクエストします。
- アプリは authorizePasswordlessCustomer エンドポイントを呼び出し、コールバック URI を提供します。
- SLAS は、買い物客の連絡先情報と、買い物客の認証に使用できる 8 桁の時間ベースのワンタイムパスワード (TOTP) を含む HTTP POST リクエストを、コールバック URI に送信します。
- アプリは、E メール、SMS、またはその他のメカニズムで買い物客に TOTP を送信します。
- 買い物客は、リンクをクリックするか、TOTP を手動で入力してアプリに渡します。
- アプリは getPasswordLessAccessToken エンドポイントを呼び出して買い物客を認証し、SLAS アクセスおよびリフレッシュトークンを取得します。
- アクセストークンは、買い物客に代わって認可されたリクエストを行うために使用できます。
前提条件
- B2C Commerce インスタンス、Managed Runtime 環境、独自のサーバーなど、パブリックにアクセス可能なコールバック URL。パブリックコールバック URL がない場合は、テスト目的で Webhook.site などのサービスを使用できます。
- E メールや SMS など、パスワードなしのトークンを買い物客に共有するメカニズム。
- パスワードなしのログインで動作するように構成された SLAS プライベートクライアント。
コールバック URL に推測できないクエリ文字列パラメーターなどのシークレット値を含めて、リクエストが SLAS Web サービスからのものであることを検証します。
SLAS プライベートクライアントの構成
SLAS プライベートクライアントをまだ作成していない場合は、Shopper API の認可の指示に従って作成してから、このガイドに戻ってください。パスワードなしのログインは、プライベートクライアントでのみ使用可能です。
パスワードなしのログインを使用できるようにプライベートクライアントを構成するには、SLAS Admin UI で以下の手順を実行します。
- 上部のナビゲーションで、Clients (クライアント) をクリックします。
- 以前に作成したクライアント ID の横にある Edit (編集) リンクをクリックします。
- 「Scopes」 (スコープ) フィールドに、
sfcc.pwdless_login を追加します。
- 「Callback URL」 (コールバック URL) フィールドには、先ほど用意したコールバック URI を入力します。
「Redirect URL」 (リダイレクト URL) フィールドとは異なり、「Callback URL」フィールドではワイルドカードを使用できません。コールバックには、プロトコルを含む完全な URL を常に含めてください。
パスワードなしのログインの実装
www.example.com でホストされているストアフロント用のパスワードなしのログインフローを構築しているとします。買い物客は、ユーザー名を入力し、E メールでパスワードなしのログインをリクエストすることでフローを開始します。
顧客を認可する
authorizePasswordlessCustomer エンドポイントをリクエストします。
1#!/bin/bash
2set -euo pipefail
3
4# Update these values with your configuration:
5CODE='qw1ert23'
6ORG='f_ecom_abcd_001'
7CLIENT='my-slas-private-client-id'
8SECRET='my-slas-private-client-secret'
9SITE='my-ecom-site'
10CALLBACK='https://www.example.com/my-callback-url?secret=open-sesame'
11LOGIN='testuser@salesforce.com'
12
13BASE="https://$CODE.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/$ORG"
14curl "$BASE/oauth2/passwordless/login" \
15 --user "$CLIENT:$SECRET" \
16 --data "channel_id=$SITE" \
17 --data 'mode=callback' \
18 --data "callback_uri=$CALLBACK" \
19 --data-urlencode "user_id=$LOGIN"
user_id パラメーターは買い物客の実際のログイン認証情報 profile.credentials.login でなければなりません。ログイン認証情報は E メールアドレスでも可能ですが、profile.email と同じであることは保証されません。
コールバックを受け取る
SLAS は、指定されたコールバック URI に対して HTTP POST リクエストを作成します。リクエストボディは JSON ペイロードです。
1{
2 "email_id": "shopper@salesforce.com",
3 "login_id": "shopper@salesforce.com",
4 "phone": "4155550123",
5 "customer_id": "acCpPMFESaiAKjETZajoQbO3TS",
6 "token": "12345678",
7 "locale": "en-us"
8}
これには、顧客の E メールアドレスと電話番号の両方が含まれます。B2C Commerce システムでは、phone の値が phoneMobile の値に設定されます。phoneMobile がない場合、SLAS は代わりに phoneHome または phoneBusiness の値を使用します。
token の値は、買い物客に送信できる TOTP です。
- コールバックでは、リクエストされた URL にシークレット値が存在することを検証する必要があります。
- SLAS は、ヘッダーやパラメーターを追加せずに、指定された
callback_uri に対して POST 呼び出しを行います。callback_uri に Authorization ヘッダーなどの追加のヘッダーが必要な場合は、必要に応じてヘッダーやパラメーターを追加できる「プロキシ」を SLAS と callback_uri の間に配置する必要があります。
SLAS からコールバックを受信しない場合:
- コールバック URL がパブリックにアクセス可能であることを確認します。SLAS は localhost またはプライベート IP アドレスに到達できないため、パブリックにアクセス可能な URL を使用する必要があります。
- ファイアウォールで SLAS からのリクエストが許可されていることを確認します。
*.demandware.net URL からのリクエストはブロックされます。
- コールバック URL が、サイトステータスが
Online (Protected) に設定された B2C Commerce インスタンスの場合は、コールバックを取得するための保護が無効になっていることを確認します。
コールバックペイロードを検証する
SLAS コールバックリクエストの検証の手順を参照してください。
買い物客への TOTP の送信
アプリは、E メールまたは SMS で買い物客に TOTP を送信する必要があります。
トークンの有効期間は最大 10 分ですトークンの有効期限が切れた場合は、パスワードなしのログインフローを最初からやり直す必要があります。
TOTP とアクセストークンの交換
買い物客は、リンクをたどるか、TOTP を手動で入力して、TOTP をアプリに渡す必要があります。
getPasswordLessAccessToken エンドポイントをリクエストして、TOTP をアクセストークンと交換します。
1#!/bin/bash
2set -euo pipefail
3
4# Update these values with your configuration:
5CODE='qw1ert23'
6ORG='f_ecom_abcd_001'
7CLIENT='my-slas-private-client-id'
8SECRET='my-slas-private-client-secret'
9TOKEN='12345678'
10
11BASE="https://$CODE.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/$ORG"
12curl "$BASE/oauth2/passwordless/token" \
13 --user "$CLIENT:$SECRET" \
14 --data 'grant_type=client_credentials' \
15 --data 'hint=pwdless_login' \
16 --data "pwdless_login_token=$TOKEN"
オプションの login_id パラメーターは、login_id と pwdless_login_token (TOTP) の組み合わせを使用した、より強力な検証のために使用されます。
これで、SLAS が返すアクセストークン (Shopper JWT) を使用して、Shopper API を呼び出せるようになります。