feat: OAuth 2.0 백엔드 시스템 구현 완료
Phase 1 & 2 완료: - 프로젝트 기본 구조 설정 - Docker Compose 환경 구성 (MongoDB, Redis, Backend, Frontend) - FastAPI 기반 OAuth 2.0 백엔드 구현 주요 기능: - JWT 기반 인증 시스템 - 3단계 권한 체계 (System Admin/Group Admin/User) - 사용자 관리 CRUD API - 애플리케이션 관리 CRUD API - OAuth 2.0 Authorization Code Flow - Refresh Token 관리 - 인증 히스토리 추적 API 엔드포인트: - /auth/* - 인증 관련 (register, login, logout, refresh) - /users/* - 사용자 관리 - /applications/* - 애플리케이션 관리 - /oauth/* - OAuth 2.0 플로우 보안 기능: - bcrypt 비밀번호 해싱 - JWT 토큰 인증 - CORS 설정 - Rate limiting 준비 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
62
oauth/backend/app/config.py
Normal file
62
oauth/backend/app/config.py
Normal file
@ -0,0 +1,62 @@
|
||||
"""Configuration settings for OAuth backend"""
|
||||
|
||||
from typing import List, Optional
|
||||
from pydantic_settings import BaseSettings
|
||||
from pydantic import Field
|
||||
import json
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
# Application
|
||||
environment: str = Field(default="dev", env="ENVIRONMENT")
|
||||
api_prefix: str = Field(default="/api/v1", env="API_PREFIX")
|
||||
secret_key: str = Field(..., env="SECRET_KEY")
|
||||
|
||||
# MongoDB
|
||||
mongodb_url: str = Field(..., env="MONGODB_URL")
|
||||
database_name: str = Field(default="oauth_db", env="DATABASE_NAME")
|
||||
|
||||
# Redis
|
||||
redis_url: str = Field(..., env="REDIS_URL")
|
||||
redis_db: int = Field(default=0, env="REDIS_DB")
|
||||
|
||||
# JWT
|
||||
jwt_algorithm: str = Field(default="HS256", env="JWT_ALGORITHM")
|
||||
jwt_access_token_expire_minutes: int = Field(default=30, env="JWT_ACCESS_TOKEN_EXPIRE_MINUTES")
|
||||
jwt_refresh_token_expire_days: int = Field(default=7, env="JWT_REFRESH_TOKEN_EXPIRE_DAYS")
|
||||
|
||||
# CORS
|
||||
cors_origins: List[str] = Field(default=["http://localhost:5173"], env="CORS_ORIGINS")
|
||||
cors_allow_credentials: bool = Field(default=True, env="CORS_ALLOW_CREDENTIALS")
|
||||
|
||||
# Rate Limiting
|
||||
rate_limit_requests: int = Field(default=100, env="RATE_LIMIT_REQUESTS")
|
||||
rate_limit_period: int = Field(default=60, env="RATE_LIMIT_PERIOD")
|
||||
|
||||
# Logging
|
||||
log_level: str = Field(default="INFO", env="LOG_LEVEL")
|
||||
log_path: str = Field(default="/var/log/oauth", env="LOG_PATH")
|
||||
|
||||
# Admin
|
||||
admin_email: Optional[str] = Field(default="admin@oauth.local", env="ADMIN_EMAIL")
|
||||
admin_password: Optional[str] = Field(default="admin123", env="ADMIN_PASSWORD")
|
||||
|
||||
# Session
|
||||
session_secret_key: str = Field(default="session-secret-key", env="SESSION_SECRET_KEY")
|
||||
session_cookie_name: str = Field(default="oauth_session", env="SESSION_COOKIE_NAME")
|
||||
session_expire_minutes: int = Field(default=1440, env="SESSION_EXPIRE_MINUTES")
|
||||
|
||||
class Config:
|
||||
env_file = ".env"
|
||||
env_file_encoding = "utf-8"
|
||||
case_sensitive = False
|
||||
|
||||
@classmethod
|
||||
def parse_env_var(cls, field_name: str, raw_val: str):
|
||||
if field_name == "cors_origins":
|
||||
return json.loads(raw_val) if isinstance(raw_val, str) else raw_val
|
||||
return raw_val
|
||||
|
||||
|
||||
# Create settings instance
|
||||
settings = Settings()
|
||||
Reference in New Issue
Block a user