最近、APIアプリケーションをAzureクラウドサービスからAzure Webサイトに移行しました。一部のクライアントは、認証に従来のプロトコルを使用しており、(通常の_Authorization: Bearer
_ HTTPヘッダーの代わりに)Cookieを使用しています。クライアントがすぐに移行できないため、この認証プロトコルをもう少し長くサポートする必要があります。
APIに向けられたクロスオリジンのAjaxリクエストでCookieをサポートするには、クライアントはXMLHttpRequestでwithCredentials
設定をtrue
に設定する必要があり、サーバーは_Access-Control-Allow-Credentials
_ヘッダー、およびCORSリクエスト。
私たちが直面している問題は、Azure WebサイトがCORSをすべて単独で管理し、応答に独自の構成(許可されたオリジンのリストに限定されます)を使用することです。これにより、このヘッダーを設定できません...したがって、すべてのAjaxクライアント用のアプリケーション!
このヘッダーを(一時的に)応答に追加する方法はありますか?
ついに、Azure Apps CORSミドルウェアの動作を理解することができました。これを無効にするには、WebアプリのCORSブレードで許可されているすべてのOriginエントリーをクリアする必要があります(*
を含む)。その後、Web Api 2機能を使用するか、web.configを使用して、自分でCORSを管理できます。
この情報は ドキュメント でも利用できます。
1つのAPIアプリでWeb API CORSとApp Service CORSの両方を使用しないでください。 App Service CORSが優先され、Web API CORSは無効になります。たとえば、App Serviceで1つのOriginドメインを有効にし、Web APIコードですべてのOriginドメインを有効にすると、Azure APIアプリは、Azureで指定したドメインからの呼び出しのみを受け入れます。
したがって、最終的な答えは次のとおりです。アプリケーションに特別なCORS管理が必要ない場合は、Azure App Service CORSを使用できます。それ以外の場合は、自分で処理し、WebアプリですべてのCORS構成を無効にする必要があります。
これは、Webアプリで使用できるweb.configファイルで実行できることです。
Azure Portalから追加するツールであるVisual Studio Online(Monaco)を使用して編集できます。
これは、Azure App Service CORS機能でサポートされるようになりました。 残念ながら、まだUXはありませんので、有効にするのは少し大変です。 現在、2つの簡単な方法があります。
Azureポータルで、Webアプリに移動します。 API> CORSに移動します。 Enable Access-Control-Allow-Credentials
のチェックボックスが追加されました。このボックスをチェックしてSave
を押します。
次のコマンドでAzure CLIを使用します。
az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.cors.supportCredentials=true --api-version 2015-06-01
その他のドキュメント こちら をご覧ください。
注:これは、許可されたオリジンとして*
では機能しません。これは、セキュリティの選択です。