API security protects your app and users from bad people who want to steal or break things. It keeps data safe and your service working well.
When your app shares data with other apps or websites
When users log in or send private info through your API
When you want to stop hackers from messing with your service
When you need to control who can see or change your data
When you want to keep your app reliable and trusted
Syntax
FastAPI
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
asyncdef get_current_user(token: str = Depends(oauth2_scheme)):
if token != "securetoken":
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid authentication credentials",
)
return {"user": "demo"}
@app.get("/secure-data")
asyncdef read_secure_data(current_user: dict = Depends(get_current_user)):
return {"data": "This is protected data", "user": current_user["user"]}
This example uses OAuth2 password bearer token for security.
Depends() helps check the token before giving access.
Examples
This is a public API endpoint with no security.
FastAPI
from fastapi import FastAPI
app = FastAPI()
@app.get("/public")
asyncdef public_endpoint():
return {"message": "Anyone can see this"}
This shows how to check a token and reject if invalid.
FastAPI
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
asyncdef verify_token(token: str = Depends(oauth2_scheme)):
if token != "mysecrettoken":
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
Sample Program
This FastAPI app protects the /secure-data endpoint by requiring a valid token. If the token is wrong or missing, it returns an error. This keeps data safe from unauthorized users.
FastAPI
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
asyncdef get_current_user(token: str = Depends(oauth2_scheme)):
if token != "securetoken":
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid authentication credentials",
)
return {"user": "demo"}
@app.get("/secure-data")
asyncdef read_secure_data(current_user: dict = Depends(get_current_user)):
return {"data": "This is protected data", "user": current_user["user"]}
OutputSuccess
Important Notes
Always use HTTPS to keep tokens safe during transfer.
Use strong, unique tokens or keys for better security.
Test your API security by trying to access protected routes without tokens.
Summary
API security stops unauthorized access to your app.
FastAPI uses dependencies to check tokens easily.
Protecting data builds trust and keeps your app safe.
Practice
(1/5)
1. Why is API security critical when building applications with FastAPI?
easy
A. It reduces the size of the API responses.
B. It makes the API run faster.
C. It automatically fixes bugs in the code.
D. It prevents unauthorized users from accessing sensitive data.
Solution
Step 1: Understand the purpose of API security
API security is designed to stop unauthorized users from accessing or changing data they shouldn't see.
Step 2: Relate to FastAPI's use case
FastAPI uses security measures like token checks to protect data and user privacy.
Final Answer:
It prevents unauthorized users from accessing sensitive data. -> Option D
Quick Check:
API security = prevent unauthorized access [OK]
Hint: Think: security means stopping unwanted access [OK]
Common Mistakes:
Confusing security with performance improvements
Believing security fixes bugs automatically
Thinking security reduces data size
2. Which FastAPI code snippet correctly adds a security dependency to check an API token?
easy
A. from fastapi import Depends, Security
from fastapi.security import APIKeyHeader
api_key_header = APIKeyHeader(name="Authorization")
@app.get("/secure")
async def secure_route(api_key: str = Security(api_key_header)):
return {"key": api_key}
B. from fastapi import Depends
@app.get("/secure")
async def secure_route(token: str = Depends("Authorization")):
return {"token": token}
C. from fastapi import Security
@app.get("/secure")
async def secure_route(api_key: str = Security("Authorization")):
return {"key": api_key}
D. from fastapi import Depends
@app.get("/secure")
async def secure_route(api_key: str):
return {"key": api_key}
Solution
Step 1: Identify correct use of Security dependency
FastAPI uses Security with APIKeyHeader to check headers like Authorization tokens.
Step 2: Check code correctness
from fastapi import Depends, Security
from fastapi.security import APIKeyHeader
api_key_header = APIKeyHeader(name="Authorization")
@app.get("/secure")
async def secure_route(api_key: str = Security(api_key_header)):
return {"key": api_key} correctly imports APIKeyHeader, creates a header dependency, and uses Security to enforce it.
Final Answer:
Code using APIKeyHeader and Security dependency correctly. -> Option A
Quick Check:
Security dependency with APIKeyHeader = from fastapi import Depends, Security
from fastapi.security import APIKeyHeader
api_key_header = APIKeyHeader(name="Authorization")
@app.get("/secure")
async def secure_route(api_key: str = Security(api_key_header)):
return {"key": api_key} [OK]
Hint: Look for APIKeyHeader and Security usage together [OK]
Common Mistakes:
Using Depends with a string instead of a dependency
Missing APIKeyHeader import or usage
Not using Security for header token checks
3. Given this FastAPI route, what will be the response if the client sends a request without the required API key header?