zioinfo-mail/workspace/guardia-manager/backend/core/auth.py
DESKTOP-TKLFCPR\ython cfe2901a55 refactor(structure): consolidate all projects under workspace/
- itsm/    -> workspace/guardia-itsm/
- manager/ -> workspace/guardia-manager/
- app/     -> workspace/guardia-messenger/
- manual/  -> workspace/guardia-docs/

workspace/zioinfo-web/ unchanged.
git mv preserves full commit history.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 23:50:56 +09:00

22 lines
913 B
Python

import os
from fastapi import Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt
SECRET = os.environ.get("GUARDIA_JWT_SECRET", "guardia-jwt-secret-2026-change-me!")
ALGORITHM = "HS256"
oauth2 = OAuth2PasswordBearer(tokenUrl="/guardia-api/api/auth/login", auto_error=False)
async def verify_token(token: str = Depends(oauth2)) -> dict:
if not token:
raise HTTPException(status_code=401, detail="인증이 필요합니다.")
try:
return jwt.decode(token, SECRET, algorithms=[ALGORITHM])
except JWTError:
raise HTTPException(status_code=401, detail="유효하지 않은 토큰입니다.")
async def require_admin(payload: dict = Depends(verify_token)) -> dict:
if payload.get("role") not in ("admin",):
raise HTTPException(status_code=403, detail="관리자 권한이 필요합니다.")
return payload