Iframeのコンテンツをレンダリングするアクションの一部から_X-Frame-Options: SAMEORIGIN
_ヘッダーを削除する必要があります。デフォルトでリクエストに追加されている限り、_Startup.cs
_:services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = false);
で無効にしました。次に、簡単なミドルウェアを作成しました。
_ app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
await next();
});
_
クロスドメインリクエストに応答するために必要なアクションは、結果フィルター属性で装飾されています。
_ public class SuppresXFrameOptionFilter : ResultFilterAttribute
{
public override async Task OnResultExecutionAsync(ResultExecutingContext context,
ResultExecutionDelegate next)
{
context.HttpContext.Response.Headers.Remove("X-Frame-Options");
await next();
}
}
_
これが堕落です。フィルタが最終的に期待どおりに機能するにもかかわらず、最初のクロスドメイン要求は失敗します。これは、応答に_X-Frame-Options: SAMEORIGIN
_がまだ存在するためです(ミドルウェアのnext()
の後にチェックしました-ヘッダーが再表示されました)。 F5キーを押すと、ヘッダーが応答に含まれなくなり、すべてが正常に機能します。これは_X-Frame-Options
_ヘッダーでのみ発生し、カスタムヘッダーは正しく削除されます。削除された_X-Frame-Options
_が応答に再び表示されるのはなぜですか?
最初のリクエストで Antiforgery Cookieを保存します。これは、X-Frame-Options
ヘッダーも設定しようとすることを意味します。
Antiforgeryでそのヘッダーを無効にし、手動で処理する場合は、SuppressXFrameOptionsHeader
をtrue;)に設定します。
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);