\ ポイント最大11倍! /

FastAPIでCORS対策をする方法

FastAPI で CORS(Cross-Origin Resource Sharing)対策するには、fastapiに標準搭載されたミドルウェアを使います。

FastAPIでCORS対策をする方法

以下の手順で実装を進めます。

  1. CORSMiddlewareをインポート
  2. アプリケーションにミドルウェアを追加
  3. 許可するオリジン、メソッド、ヘッダーを指定

具体的には以下のようなコードになります。

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# 許可するオリジン(例:すべてのオリジンを許可)
origins = [
    "http://localhost",
    "http://localhost:8000",
    "https://example.com",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,   # 許可するオリジン
    allow_credentials=True,  # Cookieなどを許可
    allow_methods=["*"],     # 許可するHTTPメソッド
    allow_headers=["*"],     # 許可するHTTPヘッダー
)

@app.get("/")
async def root():
    return {"message": "Hello, CORS!"}

FastAPIのCORSの設定値の意味を解説

allow_origins

リクエスト元を限定して、危険なリクエストを排除する設定です。

allow_origins=origins

リクエスト元のスキーム名、ホスト名、ポート番号の組み合わせ(オリジン)をリスト形式で指定します。

allow_origins=["*"]だとすべてのオリジンを許可しますが、セキュリティが脆弱になってしまうので信頼できるオリジンだけを指定するのがセオリーです。

allow_credentials

リクエスト元から受け取れる認証情報を許可するかを設定できます。

allow_credentials=True

認証やセッション管理したい場合はTrueにします。

また、allow_credentials=Trueにする場合には、allow_originsで特定のオリジンからのリクエストに限定することがセオリーです。

allow_methods

クライアントから送信できるメソッドを限定します。

allow_methods=["GET", "POST"]  # GET, POSTだけを許可する

セキュリティ上は、必要なメソッドだけを許可することが推奨されます。

allow_headers

クライアントがリクエストに必要なヘッダーを含められるようにします。

allow_headers=["Authorization", "Content-Type", "X-Custom-Header"]


これを設定しない場合、例えば以下のような標準的なヘッダーが許可された状態になっています。

  • Accept
  • Content-Type
  • Authorization

X-Custom-Headerなどの特定のカスタムヘッダーを使う場合には、allow_headersで明示する必要があります。

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

karo@プログラマのアバター karo@プログラマ プログラマ

「書くことで人の役にたつ」をモットーに活動中。
本職はプログラマで、Pythonが得意。
基本情報技術者試験合格。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)