약 6분
본문 듣기
읽기 설정
글자 크기
줄 간격
글꼴
6.1 인증의 중요성
인증(Authentication)은 사용자가 자신이 주워진 자격 증명을 통해 주장하는 신원을 확인하는 과정입니다. 웹 어플리케이션에서 사용자 인증은 많은 중요한 역할을 합니다. 예를 들어, 사용자가 자신의 계정에 접근하고 정보를 수정하거나 삭제할 수 있는 권한이 있는지를 확인합니다. 이는 보안의 기본 편입니다.
인증이 중요한 이유는 다음과 같습니다:
- 데이터 보호: 사용자 계정의 정보와 데이터가 도난사고로부터 보호됩니다.
- 신뢰 구축: 사용자가 사이트에 안심하고 로그인할 수 있게 합니다.
- 개인화된 경험 제공: 사용자가 로그인할 경우 개인 맞춤형 서비스와 정보를 제공할 수 있습니다.
이 강의에서는 FastAPI를 사용하여 인증을 구현하는 방법에 대해 진행할 예정입니다. 사용자 인증을 효과적으로 처리하기 위해 JWT(JSON Web Tokens)를 사용할 것입니다. 이 기법으로, 사용자는 로그인 시 JWT를 발급받고 이를 통해 인증을 유지하게 됩니다.
코드
python
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
from datetime import datetime, timedelta
from jose import JWTError, jwt
app = FastAPI()
# Secret key to encode the JWT
SECRET_KEY = "your_secret_key"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30
# OAuth2 initialization
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")
class User(BaseModel):
username: str
class UserInDB(User):
hashed_password: str
def create_access_token(data: dict, expires_delta: timedelta = None):
to_encode = data.copy()
if expires_delta:
expire = datetime.utcnow() + expires_delta
else:
expire = datetime.utcnow() + timedelta(minutes=15)
to_encode.update({"exp": expire})
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt
@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
user = fake_users_db.get(form_data.username)
if not user or not verify_password(form_data.password, user["hashed_password"]):
raise HTTPException(status_code=400, detail="Incorrect username or password")
access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
access_token = create_access_token(
data={"sub": user["username"]}, expires_delta=access_token_expires
)
return {"access_token": access_token, "token_type": "bearer"}
이번 실습에서는 사용자 인증을 구현하는 간단한 FastAPI 애플리케이션을 작성해 보았습니다. 사용자가 로그인할 때 JWT를 생성하고 발급하는 과정을 가이드했습니다. 다음 시간까지 이 코드를 기반으로 여러분만의 인증 시스템을 개선해 보시기 바랍니다.
퀴즈 및 실습 과제
- 퀴즈: JWT의 역할은 무엇인가요?
- 실습 과제: 주어진 코드를 바탕으로 사용자가 로그아웃하는 기능을 추가하세요(예: 특정 토큰 삭제).
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.