1. Sitecore.Services.クライアント

クロスオリジンリソース共有 (CORS)

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

ブラウザのセキュリティにより、Webページが別のドメインに対してAJAXリクエストを行うのを防ぎます。この制限は、同一生成元ポリシーと呼ばれます。ただし、他のサイトでWeb APIを呼び出させたい状況もあります。

Cross Origin Resource Sharing (CORS) は、サーバーが同一生成元ポリシーを緩和できるようにするW3C標準です。CORSを使用すると、サーバーは一部のクロスオリジンリクエストを明示的に許可し、他のリクエストを拒否できます。

詳細については、「ASP.NET Web APIでのクロスオリジン要求の有効化」を参照してください。

このトピックでは、次の内容について説明します。

  • CORSの設定

  • プレフライト要求の処理

CORSの設定

Sitecoreは、Web APIサービスのCORSサポートを提供します。これは、すべてのカスタムWeb APIサービスだけでなく、Sitecoreが提供するサービス (アイテム サービスやODataアイテム サービスなど) にも適用されます。

CORSは、次の3つの方法で構成できます。

  • すべてのWeb APIサービス ( Sitecore.Services.Client.configファイルで構成) に対してグローバルに。

  • APIキーを使用する。

  • EnableCors属性を使用する。

グローバル設定

Sitecore.Services.Client.configファイルには、allowedOriginsというセクションがあります。このセクションでは、オリジンを登録します。CORSを有効にするためにリクエストでAPIキーを指定する必要はありませんが、APIキーまたはEnableCors属性を介して登録されたオリジンは、グローバルに登録されたオリジンよりも優先されます。

次のように、許可されたオリジンを追加します。

<allowedOrigins hint="list:AddOrigin">
    <origin>http://example.com</origin>  
    <origin>http://localhost:39467</origin>  
</allowedOrigins>

APIキーの使用

APIキーを使用するようにサービスを設定すると、Sitecoreはリクエストで指定されたこのキーから許可されたオリジンを解決します。

許可されるオリジンは、APIキー項目のCORS Originsフィールドで指定します。

メモ

OData Item ServiceはAPIキーを使用するように構成されており、APIキーから許可されたオリジンを取得できます。

EnableCors属性の使用

CORSを有効にするには、(System.Web.Http.Cors名前空間の) EnableCors属性をコントローラー クラスに追加し、必要に応じて 、originsheaders、およびmethodsパラメーターを指定します。

たとえば、次のコントローラーには、すべてのリソース制限パラメーターのワイルドカード値があります。

[ServicesController][EnableCors(origins: "*", headers: "*", methods: "*")]public class TestController : ServicesApiController { ... }

実稼働環境では、リソースにアクセスできるものについて、より制限の厳しい定義を使用する必要があります。

プレフライト要求の処理

特定の状況下 (詳細については https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORSを参照)、ブラウザーは、リクエストされたオリジンが許可されていることを確認するために、プレフライトリクエストを生成します。

ブラウザーは、プリフライト要求と共にカスタムヘッダーを渡しません。そのため、ヘッダーで指定されたAPIキー IDはサーバーに到達しません。

APIキーを使用して許可されたオリジンを設定するには、APIキー IDをURLパラメーター (http://{host}/sitecore/api/ssc/aggregate/content/Items?sc_apikey={api key}).

この記事を改善するための提案がある場合は、 お知らせください!