FastAPI で CORS(Cross-Origin Resource Sharing)対策するには、fastapiに標準搭載されたミドルウェアを使います。
Contents
FastAPIでCORS対策をする方法
以下の手順で実装を進めます。
CORSMiddleware
をインポート- アプリケーションにミドルウェアを追加
- 許可するオリジン、メソッド、ヘッダーを指定
具体的には以下のようなコードになります。
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
で明示する必要があります。
コメント