SLAS ID プロバイダー
ソーシャルメディアのアカウントや他の連携ログインシステム (Google のシステムなど) を使ったログインをサポートするには、SLAS の外部 ID プロバイダー (IDP) を設定する必要があります。
IDP を使用する場合、買い物客の認証情報は B2C Commerce ではなく外部 ID システムに保存されます。IDP の使用は任意です。外部 IDP ではなく、B2C Commerce システムに認証情報が保存されている買い物客のログインと API アクセスの実装には、引き続き SLAS を使用できます。
買い物客が IDP を通じてログインすると、その IDP に関連する顧客レコードが作成されます。たとえば、rachel.rodriquez@example.com
が最初に Google でログインし、次に Facebook でログインした場合、2 つの別々の顧客レコードが作成されます。Rachel が Google でログインして買い物をした後、Facebook でログインすると、Google でログインしたときに購入したものは表示されません。購入した商品を再び見るには、(Facebook ではなく) Google でログインする必要があります。
SLAS 認証にサードパーティ ID プロバイダー (IDP) のみを使用している場合は、SLAS クライアント ID を構成して SLAS /login
エンドポイントへのアクセスをブロックできますが、これはサードパーティ IDP ワークフローには必要ありません。
/login
エンドポイントの使用をブロックするには、SLAS Admin UI で SLAS クライアント ID を構成するときに、loginEpRestrict
パラメーターをtrue
(有効) に設定します。セキュリティ上の理由から、loginEpRestrict
が true
(有効) に設定されている場合、/login
エンドポイントへの呼び出しは 403 Forbidden コードを返します。
SLAS /login
エンドポイントへのアクセスを許可するには、次のいずれかの操作を行います。
loginEpRestrict
が有効になっていない別の SLAS クライアント ID を設定する。loginEpRestrict
パラメーターを無効にする。
デフォルトでは、loginEpRestrict は false (無効) に設定されており、SLAS /login エンドポイント呼び出しを処理できます。
サポートされている IDP を設定するには、まず IDP の管理ポータルで OAuth クライアントを作成します。次に、SLAS Admin UI または SLAS Admin API を使用して、SLAS テナントの IDP を構成します。
1 つのテナントに複数の IDP を設定できます。たとえば、同じテナントに対して、Google と Facebook の両方を IDP として設定できます。
SLAS Admin API の registerIdentityProvider を使用して、Google を IDP として設定するリクエストの例を次に示します。
name
の値の前には、サポートされている IDP の識別子を付ける必要があります。接頭辞に-
を追加し、その後に文字列を追加してバリエーションを作成できます。たとえば、google
google-test
は使用できますが、googletest"
は使用できません。redirectUrl
は特定の形式に従います。- IDP は
redirectUrl
を使用して SLAS にリダイレクトし、買い物客がログインしたままで SLAS 認可コードが作成されるようにします。 - デフォルトでは、SLAS は
client_secret_basic
認証を使用して IDP と対話します。メソッドをclient_secret_post
に変更するには、リクエストボディでisClientCredsBody: true
を提供します。
買い物客を IDP でログインさせるには、パブリックまたはプライベートのユースケースガイドで詳述されているフェデレーションログインフローに従います。
authorizeCustomer エンドポイントと getAccessToken エンドポイントを使用したパブリッククライアントフローの例を以下に示します。
買い物客が認証に失敗した場合、または認証をキャンセルした場合、ブラウザーはクエリ文字列内のエラーの詳細とともにリダイレクト URI に送信されます。
SLAS の logoutCustomer
エンドポイントを呼び出しても、顧客はサードパーティ IDP からログアウトされません。顧客は IDP から明示的にログアウトする必要があります。
一部の IDP (特に Google) は、OAuth 同意画面にリダイレクト URL (またはリダイレクト URL の一部) を表示します。
ドメインが含まれるようにリダイレクト URL をカスタマイズするには:
- ブランドドメインで、SLAS IDP コールバック URL をプロキシするリバースプロキシを構成します。例:
https://auth.example.com/slas-callback/{{idp_name}}
→https://$SHORT_CODE.api.commercecloud.salesforce.com/shopper/auth/v1/idp/callback/$IDP_NAME
- 許可されたコールバック URL としてリバースプロキシ URL を含めるように IDP の OAuth クライアントを構成します。
redirectUrl
パラメーターにリバースプロキシ URL を使用するように SLAS IDP 設定を構成します。SLAS Admin API の registerIdentityProvider エンドポイントまたは SLAS Admin UI の IDP ページを使用して、新しい IDP を登録したり、既存の IDP を更新したりできます。
PWA Kit デベロッパーは、リバースプロキシを構成する手順をスキップできます。(前述の他の 2 つの構成手順は実行する必要があります。) デフォルトでは、PWA Kit プロジェクトは、Managed Runtime のリバースプロキシを使用して、パスに /mobify/proxy/api/
を含むリクエストを B2C Commerce API に転送するようにすでに構成されています。PWA Kit プロジェクトの SLAS IDP コールバック URL は次のようになります。
PWA Kit と Managed Runtime を使用したプロキシの詳細については、リクエストのプロキシを参照してください。
サードパーティとの認可コードフローの場合、SLAS では、SLAS /authorize
エンドポイントにクエリパラメーターを追加して、サードパーティ IDP の /authorize
エンドポイントに渡すことができます。
SLAS は、プレフィックスが “c_” のサードパーティの認可パラメーターを探します。存在する場合、SLAS はこれらを サードパーティの IDP /authorize
エンドポイントに渡します。
- SLAS は、“c_” で始まるクエリパラメーターを探します。例:
- c_auth0_state=a495d731-66a1-4e0b-9b57-b9fa4adca2cc&c_parm2
,
- c_auth0_state=a495d731-66a1-4e0b-9b57-b9fa4adca2cc&c_parm2
- SLAS では、 “c_” プレフィックスが削除され、キーと値のペアがクエリパラメーターとしてサードパーティ IDP の /authorize URI に追加されます。例:
- ...auth0/authorize&auth0_state=a495d731-66a1-4e0b-9b57-b9fa4adca2cc,¶m2=jakku&scope=offline email...
- SLAS は、サードパーティ IDP の /authorize エンドポイントクエリパラメーターを検証します。
- キーと値のペアに値がない場合、クエリパラメーターは追加されません。
- すべてのサードパーティ IDP の /authorize エンドポイントクエリパラメーターの合計文字長は 2K を超えることはできません。
- Web、SPA、モバイルアプリ、または BFF が、SLAS
/authorize
エンドポイントを呼び出します。 - この呼び出しには、OAuth
STATE
パラメーターと、c_
で示されるNEW
顧客パラメーターが含まれます。 - SLAS は
CALLER_STATE
を保存し、後でリダイレクトを介して返します。 - SLAS は、SSO フローの一部としてダウンストリーム IDP の
/authorize
エンドポイントを呼び出します。呼び出しには、SLAS_STATE
値と、最初のステップで SLAS に提供されたカスタムパラメーターが含まれます。 - IDP は認証呼び出しを実行します。
- IDP はリダイレクト呼び出しで
SLAS_STATE
を返します。 - SLAS はバッキングストアから
CALLER_STATE
をプルします。 - SLAS は、リダイレクト内の
CALLER_STATE
を元の呼び出し元に返します。
IDP 状態変数 c_auth0_state
を使用した SLAS への cUrl コマンドの例:
次に SLAS は、サードパーティ IDP の /authorize
エンドポイントへの呼び出し用に Location ヘッダーを作成します。
その前の呼び出しにより、OIDC 仕様に従って 8fb24a51-d4cc-42bd-af02-7c1740a1448c が保持された状態で、IDP から SLAS へコールバックが行われます。
カスタムパラメーターもカスタムパラメーター値も、認証の完了時に redirect_uri
に返されません。
SLAS は、以下の IDP をネイティブにサポートしています。
adfs
: Active Directory Federated Serviceapple
: Appleauth0
: Auth0azure_adb2c
: Azure Active Directory B2Cazure
: Azure Active Directorycognito
: Amazon Cognitofacebook
: Facebookforgerock
: Forgerockgigya
: SAP Gigyagigya_social
: SAP Gigya ソーシャルログインgoogle
: Googleline
: LINE ログインと Web アプリの連携okta
: Oktaping
: Ping Identitysalesforce
: Salesforce
SLAS は、OpenID Connect をサポートする IDP のみをサポートします。SLAS は SAML をサポートしていません。
SLAS のデフォルトの IDP 機能を使用して、他の IDP を構成します。
Apple を IDP として構成するには、追加の構成が必要です。
authUrl
はhttps://appleid.apple.com/auth/authorize?response_mode=form_post
でなければなりません。- クライアントシークレットは Apple アプリケーションの秘密鍵である必要があります。Apple Developer Dashboard から、「Certificates, Identifiers & Profiles (証明書、ID、プロファイル)」の「Keys (キー)」 を選択します。SLAS で使用するキーを選択し、その
.p8
ファイルをダウンロードします。-----BEGIN PRIVATE KEY-----
から----END PRIVATE KEY-----
までの値をクライアントシークレットとして使用します。 - クライアント認証用の秘密鍵を作成するときに、Apple から取得したキー ID を指定します。この値は、Apple Developer Dashboard の「Certificates, Identifiers & Profiles (証明書、ID、プロファイル)」の「Keys (キー)」にもあります。
- Apple チーム ID を入力します。
SLAS Admin API の registerIdentityProvider
エンドポイントを使用し、Apple を IDP として設定するリクエストの例を次に示します。