Traffine I/O

Bahasa Indonesia

2022-07-06

Mengkonfigurasi CORS di FastAPI

Pengenalan

Seiring dengan semakin kompleksnya aplikasi web, seringkali diperlukan berbagi resource antar asal atau domain yang berbeda. Namun, untuk melindungi data pengguna dan menjaga keamanan, browser menerapkan kebijakan yang disebut Same-Origin Policy, yang secara default mencegah berbagi resource antar asal. Inilah saatnya CORS (Cross-Origin Resource Sharing) berperan, sebagai mekanisme yang memungkinkan pengembang mengesampingkan kebijakan default ini saat diperlukan, sehingga memungkinkan berbagi resource yang terkontrol antar asal yang berbeda.

Dalam konteks FastAPI, mengkonfigurasi CORS dengan tepat sangat penting untuk memungkinkan aplikasi web Anda berinteraksi dengan layanan-layanan yang berbeda secara aman. Artikel ini akan membimbing Anda dalam cara mengkonfigurasi middleware CORS di FastAPI, mulai dari konfigurasi sederhana yang cocok untuk pengujian dan pengembangan, hingga pengaturan yang lebih canggih untuk lingkungan produksi.

Mengkonfigurasi Middleware CORS

FastAPI menggunakan Starlette untuk bagian-bagian web, yang mencakup sistem middleware. CORS diatur melalui kelas middleware khusus yang terdapat di Starlette, dan juga tersedia di FastAPI.

Untuk menggunakannya, Anda mengimpor CORSMiddleware dan kemudian menambahkannya ke aplikasi Anda:

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

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Allows all origins
    allow_credentials=True,
    allow_methods=["*"],  # Allows all methods
    allow_headers=["*"],  # Allows all headers
)

Pada konfigurasi dasar ini, kita mengizinkan semua asal, metode, dan header, serta mengizinkan kredensial.

Konfigurasi ini bersifat toleran dan berguna untuk pengujian, tetapi untuk aplikasi produksi, Anda harus lebih membatasi. Dalam skenario dunia nyata, Anda akan mengganti "*" pada allow_origins dengan daftar URL yang diizinkan berkomunikasi dengan aplikasi FastAPI Anda, dan Anda akan membatasi allow_methods dan allow_headers hanya pada metode dan header yang diperlukan aplikasi Anda untuk berfungsi.

Menangani CORS di FastAPI

Konfigurasi CORS Sederhana

Konfigurasi CORS sederhana di FastAPI dapat diimplementasikan dengan mengizinkan semua asal, metode, dan header. Ini biasanya digunakan selama pengembangan tetapi tidak disarankan di lingkungan produksi karena masalah keamanan.

Berikut adalah contoh konfigurasi CORS sederhana:

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

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Allows all origins
    allow_credentials=True,
    allow_methods=["*"],  # Allows all methods
    allow_headers=["*"],  # Allows all headers
)

Konfigurasi CORS Lanjutan

Di lingkungan produksi, Anda akan membutuhkan konfigurasi CORS yang lebih canggih. Biasanya melibatkan menentukan daftar asal, metode, dan header yang diizinkan.

Berikut adalah contoh konfigurasi CORS lanjutan di FastAPI:

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

app = FastAPI()

origins = [
    "http://localhost.tiangolo.com",
    "https://localhost.tiangolo.com",
    "http://localhost",
    "http://localhost:8080",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["GET", "POST"],
    allow_headers=["Authorization", "Content-Type"],
)

Pada contoh ini, kita hanya mengizinkan asal-asal tertentu yang terdaftar dalam daftar asal origins. Kita juga hanya mengizinkan metode GET dan POST, serta hanya header Authorization dan Content-Type.

Menangani Asal yang Spesifik

Terkadang Anda mungkin perlu menentukan asal-asal tertentu yang akan ditangani. Hal ini dapat dilakukan dengan menambahkannya ke dalam daftar origins pada contoh di atas. Namun, bagaimana jika Anda perlu mengizinkan semua subdomain dari suatu domain tertentu?

Di sinilah parameter allow_origin_regex berperan. Ini memungkinkan Anda untuk menentukan ekspresi reguler sebagai asal yang diizinkan. Berikut adalah contoh penggunaannya:

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

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origin_regex='https?://.*\.example\.com',
    allow_credentials=True,
    allow_methods=["GET", "POST"],
    allow_headers=["Authorization", "Content-Type"],
)

Pada contoh ini, aplikasi akan mengizinkan asal mana pun yang cocok dengan ekspresi reguler https?://.*\.example\.com, termasuk subdomain apa pun dari example.com, dengan menggunakan protokol http atau https.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!