728x90
반응형
OAuth 2.0 인증 체계의 완벽 가이드
OAuth 2.0은 현대 웹과 모바일 애플리케이션에서 안전한 권한 위임을 위한 업계 표준 프레임워크입니다. 이 프로토콜은 타사 애플리케이션이 사용자의 민감한 계정 정보(비밀번호 등)에 직접 접근하지 않으면서도 사용자를 대신하여 보호된 리소스에 접근할 수 있게 해줍니다.
핵심 구성 요소
- 리소스 소유자 (Resource Owner)
- 보호된 리소스에 대한 접근 권한을 가진 사용자
- 일반적으로 서비스를 이용하는 최종 사용자
- 클라이언트 (Client)
- 리소스 소유자의 보호된 리소스에 접근하려는 애플리케이션
- 웹 애플리케이션, 모바일 앱, 데스크톱 프로그램 등이 해당
- 리소스 서버 (Resource Server)
- 보호된 사용자 리소스를 호스팅하는 서버
- 유효한 액세스 토큰으로 인증된 요청을 처리
- 인가 서버 (Authorization Server)
- 사용자 인증 및 클라이언트 인가 처리
- 액세스 토큰과 리프레시 토큰 발급
- 리소스 서버와 동일하거나 별도 시스템일 수 있음
인증 흐름 프로세스
- 사용자 권한 요청
- 클라이언트가 사용자에게 특정 리소스 접근 권한을 요청
- 사용자는 인가 서버로 리다이렉트됨
- 사용자 인증 및 동의
- 사용자가 인가 서버에서 자신의 신원을 확인
- 클라이언트의 리소스 접근 범위(스코프)에 명시적 동의
- 인가 코드 발급
- 인가 서버가 클라이언트에게 일회용 인가 코드 발급
- 사용자의 브라우저를 통해 클라이언트의 리다이렉트 URI로 전달
- 액세스 토큰 교환
- 클라이언트는 인가 코드와 자신의 인증 정보를 인가 서버에 직접 전송
- 인가 서버는 이를 검증하고 액세스 토큰과 선택적으로 리프레시 토큰 발급
- 보호된 리소스 접근
- 클라이언트는 획득한 액세스 토큰을 사용해 리소스 서버의 API 호출
- 리소스 서버는 토큰 검증 후 요청된 리소스 제공
인가 그랜트 유형
- 인가 코드 그랜트 (Authorization Code Grant)
- 가장 완전한 OAuth 2.0 플로우
- 보안성이 높고 리프레시 토큰 지원
- 서버 사이드 애플리케이션에 최적화
- 암시적 그랜트 (Implicit Grant)
- 단순화된 흐름으로 인가 코드 단계 생략
- SPA(Single Page Application)에 적합했으나 현재는 권장되지 않음
- 리소스 소유자 비밀번호 자격 증명 그랜트 (Resource Owner Password Credentials)
- 사용자가 클라이언트에게 직접 자격 증명 제공
- 높은 신뢰도의 자사 애플리케이션에만 제한적 사용
- 클라이언트 자격 증명 그랜트 (Client Credentials)
- 사용자 컨텍스트 없이 클라이언트 자체의 인증
- 서버 간 API 통신에 주로 사용
보안 요소
- 상태 파라미터 (State Parameter)
- CSRF(Cross-Site Request Forgery) 공격 방지
- 요청과 응답 간의 상태 유지 검증
- PKCE (Proof Key for Code Exchange)
- 코드 인터셉트 공격 방지
- 공개 클라이언트에 추가 보안 레이어 제공
- 스코프 (Scope)
- 클라이언트의 액세스 권한 범위 명시적 정의
- 최소 권한 원칙 구현 지원
- 토큰 만료
- 액세스 토큰에 짧은 수명 부여
- 리프레시 토큰으로 사용자 재인증 없이 새 액세스 토큰 획득
현대적 확장과 모범 사례
- OpenID Connect - OAuth 2.0 위에 구축된 ID 레이어로 인증 기능 추가
- JWT(JSON Web Tokens) - 자체 포함 토큰 형식으로 검증 및 정보 전달 용이
- 보안 확장 - OAuth 2.1 및 추가 확장으로 보안 최적화 지원
728x90
반응형
'프론트엔드' 카테고리의 다른 글
S3와 CloudFront를 활용한 React 프로젝트 배포 가이드 (0) | 2025.05.27 |
---|---|
ORM의 개념,Prisma의 개념,3Tier의 개념 (0) | 2025.05.22 |
CORS와 SOP의 개념 및 구현 방법 이해하기 (0) | 2025.05.12 |
HTTP와 HTTPS의 차이점과 보안 메커니즘 이해하기 (0) | 2025.05.12 |
네트워크의 기본 구조와 개념 이해하기 (0) | 2025.05.12 |