---
title: "クロスオリジン資源共有(CORS)"
slug: "cross-origin-resource-sharing--cors-"
abstract: "クロスオリジン参照共有への対処法"
---
# クロスオリジン資源共有(CORS)

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

[クロスオリジンリソースシェアリング(CORS)](http://www.w3.org/TR/cors/) は、サーバーが同一オリジンポリシーを緩和できるW3Cの標準です。CORSを使用すると、サーバーは一部のクロスオリジンリクエストを明示的に許可し、他は拒否することができます。

詳細については、「 [ASP.NET Web APIにおけるクロスオリジン要求の有効](http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api)化」をご覧ください。

このトピックでは以下の内容を説明します:

-   CORSの設定
-   プリフライトリクエストの処理

## CORSの設定

SitecoreはWeb APIサービスに対してCORSサポートを提供しています。これは、すべてのカスタムWeb APIサービスおよびSitecoreが提供するサービス(例:Item ServiceやOData Item Service)に適用されます。

CORSの設定方法は3通りあります:

-   Sitecore.Services.Client.configファイルで設定されたすべてのウェブAPIサービスに対してグローバルに適用されます。
-   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キーを使用するように設定されており、そこから許可されたオリジンを取得することができます。

### EnableCors属性の使用

コントローラクラスに[EnableCors](http://msdn.microsoft.com/en-us/library/system.web.http.cors.enablecorsattribute.aspx)属性( 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](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}).