OAuth와 인증 시스템 구현 가이드

인증과 인가의 차이

인증(Authentication)은 '누구인가'를 확인하는 것이고, 인가(Authorization)는 '무엇을 할 수 있는가'를 결정하는 것입니다. 40년간 보안 시스템을 구축해온 저로서는 이 구분이 매우 중요하다고 강조합니다. 로그인은 인증이고, 권한 검사는 인가입니다.

세션 기반 인증

전통적인 웹 인증 방식입니다. 로그인 시 서버에 세션을 생성하고 세션 ID를 쿠키로 전달합니다. 매 요청마다 세션 ID로 사용자를 확인합니다. 서버에 상태를 저장해야 합니다(stateful). 분산 환경에서는 세션 공유가 필요합니다(Redis 등). CSRF 공격에 주의해야 합니다.

JWT(JSON Web Token)

JWT는 토큰 자체에 정보를 담은 stateless 인증 방식입니다. 서버가 상태를 저장하지 않아 확장이 쉽습니다. 토큰은 서명되어 위조가 어렵습니다. 하지만 토큰이 유출되면 만료 전까지 악용될 수 있습니다. Refresh Token으로 Access Token의 수명을 짧게 유지합니다.

OAuth 2.0

OAuth는 제3자 애플리케이션에 사용자 자원 접근을 위임하는 표준입니다. 'Google로 로그인', 'GitHub로 로그인'이 예입니다. 흐름: 사용자가 인가 서버에서 동의 → 인가 코드 발급 → 액세스 토큰 교환. OpenID Connect는 OAuth 위에 인증 레이어를 추가한 것입니다. 직접 구현보다 검증된 라이브러리를 사용하세요.

보안 모범 사례

비밀번호는 bcrypt, Argon2로 해시합니다. HTTPS를 필수로 사용합니다. 토큰을 안전하게 저장합니다(HttpOnly 쿠키, Secure 저장소). 다중 인증(MFA)을 고려합니다. 세션/토큰 만료 시간을 적절히 설정합니다. 로그인 시도 제한으로 브루트 포스를 방지합니다. 보안은 전문가와 상의하세요.

댓글

0
첫 번째 댓글을 작성해보세요!
← 목록으로