OAuth 2.0 プロトコルは、JWT で提供された買い物顧客コンテキストが適合しない場合の認証や認可に使用されます。サーバーからサーバーへのシナリオで Data API を使用する場合、OAuth はクライアント ID のコンテキスト内でのリクエストの認証に使用されます。これは、Client Credentials グラント と呼ばれます。Business Manager ユーザー がシステムと対話するシナリオで Shop API または Data API を使用する場合は、OAuth はユーザーのコンテキスト内でのリクエストの認証に使用されます。
サーバーからサーバーへのシナリオ では、CRM (顧客関係管理) アプリケーションなど、1 つのシステムが直接 Data API と対話します。エンドユーザーとの対話は必要ありません。このシナリオでは、アクセスをリクエストしているシステムは OAuth 2.0 クライアントアプリケーションとして機能します。このクライアントアプリケーションは、クライアントパスワードを安全に保つことができることが必要です。OAuth 2.0 仕様には、いくつかの認可グラントタイプが定義されています。サーバーからサーバーへのシナリオでは Client Credentials グラント を使用します。これは、特定のリソースオーナーまたはユーザーによって所有されていないリソースへのアクセスがクライアントアプリケーションに必要な場合に使用します。詳細については、IETF 仕様の Client Credentials Grant (Client Credentials グラント) セクションを参照してください。
別のシナリオでは、Business Manager ユーザー に対するリクエストを認証する必要があります。この場合、OCAPI では Business Manager ユーザーグラント を使用します。このグラントタイプは、買い物カゴの作成や送信など、ユーザーが買い物顧客に代わって操作を行う必要がある場合に Shop API で使用します。こういったユーザーは、Shop API を使用することで、価格調整の買い物カゴへの追加など、JWT によって認証された顧客ではできないような操作も実行できます。このグラントタイプは、Data API へのリクエストの認証にも使用できます。認証されたユーザーは Business Manager の許可モジュールで許可を割り当てることによって、認可する必要があります。
認証と認可の基本手順
次の手順を実行します:
Account Manager を使用してお使いのクライアントアプリケーションを登録します:
Open Commerce API にアクセスするクライアントアプリケーションはすべて、Commerce Cloud Account Manager で登録する必要があります。Open Commerce API のクライアント ID の追加を参照してください。登録後、Commerce Cloud Digital とクライアントアプリケーションの両方で使用できる値のセット (クライアント ID とクライアントパスワード) が提供されます。
Digital にはクライアントパスワードのコピーは保管されません。代わりに、一方向のハッシュが保存されます。
Note
アクセストークンをリクエストします:
Digital Authorization Server (Digital 認可サーバー) は、OAuth 2.0 認可サーバーとして機能するセントラルサーバー (account.demandware.com) です。クライアントは、このサーバーからアクセストークンを取得できます。アクセストークン取得のメカニズムは、使用するグラントタイプに応じて異なります。Business Manager ユーザーグラントの場合、Digital Application Server (Digital アプリケーションサーバー) がトークンのリクエストをこの認証サーバーに転送します。
OCAPI リクエストにアクセストークンを含めます:
お使いのクライアントアプリケーションは、アクセストークンの取得後、各 Open Commerce API リクエストで HTTP Authorization ヘッダーの一部としてそのトークンを送信します。
クライアント ID とパスワードを使用したアクセストークンのリクエスト
お使いのクライアントアプリケーションでアクセストークンをリクエストするには、まず Account Manager で登録する必要があります。登録完了後に、Account Manager がクライアント ID を提供します。機密の Web アプリケーションをコーディングする際には、このクライアント ID と関連パスワード (登録の際に指定) が必要です。Sandbox (サンドボックス) では、デモ用のクライアント ID “[your_own_client_id]” およびクライアントパスワード “[your_own_client_id]” を使用できます。
登録後、アクセストークンのリクエストを作成します。次に、クライアントアプリケーションが Digital Authorization Server にトークンリクエストを送信します。リクエストに成功すると、Digital Authorization Server はアクセストークンを返します。お使いのクライアントアプリケーションは、このトークンを次のリクエストで使用します。
アクセストークンの有効期限が切れると、クライアントアプリケーションは同じ処理を繰り返します。
アクセストークンの取得に加えて、クライアントの許可を構成して、Open Commerce API へのアクセスをクライアントアプリケーションに許可する必要があります。Business Manager ユーザーグラントを使用する場合、ユーザーは Business Manager 許可セットにも照らし合わせて確認されます。
Note
OAuth 2.0 仕様に記載されているとおり、アクセストークンのリクエストはトランスポートレイヤーセキュリティーを使用した HTTP POST である必要があり、ボディは URL エンコードする必要があります。
Client Credentials グラントの取得:Digital Authorization Server に送信するリクエストでは、HTTP Basic Authentication mechanism (RFC 2617) の要件に従い、クライアント ID と クライアントパスワード が Authorization ヘッダーに含められます。(クライアント ID とクライアントパスワードは ’:’ で結合され、base-64 エンコードスキームを使用してエンコードされます。) パラメーター grant_type は必須で、‘client_credentials’ に設定する必要があります。以下のサンプルを参照してください:
1# header2{3 "alg": "RS256",4 "typ": "JWT"5}67# payload8{9 "iss": "[your_own_client_id]", // string identifying the issuing client app10 "sub": "[your_own_client_id]", // string identifying the issuing client app11 "exp": 1548407254, // must be not more than 30 minutes in future12 "aud": "https://account.demandware.com:443/dwsso/oauth2/access_token"13}