クロスオリジン資源共有(CORS)
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
ブラウザのセキュリティは、ウェブページが他のドメインに対してAJAXリクエストを行うのを防ぎます。この制限は同一起源ポリシーと呼ばれます。しかし、他のサイトにあなたのウェブAPIを呼び出せるようにしたい状況もあります。
クロスオリジンリソースシェアリング(CORS) は、サーバーが同一オリジンポリシーを緩和できるW3Cの標準です。CORSを使用すると、サーバーは一部のクロスオリジンリクエストを明示的に許可し、他は拒否することができます。
詳細については、「 ASP.NET Web APIにおけるクロスオリジン要求の有効化」をご覧ください。
このトピックでは以下の内容を説明します:
- CORSの設定
- プリフライトリクエストの処理
CORSの設定
SitecoreはWeb APIサービスに対してCORSサポートを提供しています。これは、すべてのカスタムWeb APIサービスおよびSitecoreが提供するサービス(例
ServiceやOData Item Service)に適用されます。CORSの設定方法は3通りあります:
- Sitecore.Services.Client.configファイルで設定されたすべてのウェブAPIサービスに対してグローバルに適用されます。
- APIキーを使っています。
- EnableCors属性を使っています。
グローバル構成
Sitecore.Services.Client.configファイルには「allowedOrigins」というセクションがあります。このセクションでオリジンを登録します。CORSを有効にするためにリクエストでAPIキーを提供する必要はありませんが、APIキーやEnableCors属性で登録されたオリジンは、グローバルに登録されたものよりも優先されます。
あなたはこのような許可された起源を追加しています:
APIキーの使用
サービスにAPIキーを指定すると、Sitecoreはリクエストで提供されたこのキーから許可されたオリジンを解決します。
APIキーアイテムのCORS Origins欄で許可された原点を指定します。
!注OData Item ServiceはAPIキーを使用するように設定されており、そこから許可されたオリジンを取得することができます。
EnableCors属性の使用
コントローラクラスにEnableCors属性( System.Web.Http.Cors名前空間から)を追加し、必要に応じてorigins、headers、methodsパラメータを指定することでCORSを有効にすることができます。
例えば、このコントローラはすべてのリソース制限パラメータに対してワイルドカード値を持っています:
ServicesControllerEnableCors(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}).