OAuth2/OIDC (OpenID Connect)
MSA(Microservice Architecture) 패턴의 보안 측면에서 OAuth2와 OIDC(OpenID Connect)는 매우 중요한 역할을 한다. 이 두 프로토콜은 분산 시스템에서의 인증과 권한 부여를 효과적으로 처리할 수 있게 해준다.
OAuth 2.0과 OIDC를 적절히 활용하면 MSA 환경에서 안전하고 효율적인 인증 및 권한 부여 시스템을 구축할 수 있다. 이는 마이크로서비스 간의 안전한 통신과 사용자 데이터 보호에 큰 도움이 된다.
OAuth 2.0
OAuth 2.0은 권한 부여를 위한 업계 표준 프로토콜이다.
주요 특징은 다음과 같다:
목적: 사용자 데이터에 대한 접근 권한을 제3자 애플리케이션에 부여하는 것이다.
주요 구성 요소:
- Resource Owner: 데이터의 소유자 (일반적으로 최종 사용자)
- Client: OAuth2를 사용하여 Resource Owner의 데이터에 접근하려는 애플리케이션
- Authorization Server: 인증을 처리하고 토큰을 발급하는 서버
- Resource Server: 보호된 데이터를 호스팅하는 서버
인증 흐름:
- Authorization Code Grant: 가장 일반적인 방식으로, 보안성이 높다.
- Implicit Grant: 더 이상 권장되지 않는 방식.
토큰:
- Access Token: 리소스 서버에 접근할 때 사용된다.
- Refresh Token: Access Token이 만료되었을 때 새로운 토큰을 얻기 위해 사용된다.
OAuth 2.0의 흐름
- 클라이언트 등록: 클라이언트는 권한 부여 서버에 등록하여 클라이언트 ID와 비밀 키를 받는다.
- 권한 부여 요청: 클라이언트는 사용자를 권한 부여 서버로 리디렉션하여 권한 부여를 요청한다.
- 사용자 승인: 사용자는 클라이언트가 자신의 자원에 접근하는 것을 승인한다.
- 권한 부여 코드 수신: 사용자가 승인을 완료하면, 권한 부여 서버는 클라이언트에게 권한 부여 코드를 전달한다.
- 액세스 토큰 요청: 클라이언트는 권한 부여 코드를 사용하여 권한 부여 서버에 액세스 토큰을 요청한다.
- 액세스 토큰 수신: 권한 부여 서버는 클라이언트에게 액세스 토큰을 발급한다.
- 자원 요청: 클라이언트는 액세스 토큰을 사용하여 리소스 서버에 보호된 자원을 요청한다.
- 자원 제공: 리소스 서버는 액세스 토큰을 검증하고 요청된 자원을 제공한다.
OIDC (OpenID Connect)
OIDC는 OAuth 2.0 프로토콜 위에 구축된 ID 계층으로, 주로 인증(Authentication)에 초점을 맞춘다.
목적: 사용자의 신원을 확인하고 기본적인 프로필 정보를 얻는 것이다.
주요 특징:
- ID Token: JWT(JSON Web Token) 형식으로, 사용자의 신원 정보를 포함한다.
- UserInfo Endpoint: 추가적인 사용자 정보를 얻을 수 있는 엔드포인트를 제공한다.
작동 방식:
- 클라이언트가 OpenID 인증을 요청한다.
- 인증 서버는 사용자를 인증하고 Authorization Code를 발급한다.
- 클라이언트는 이 코드를 사용하여 ID Token과 Access Token을 요청한다.
OIDC의 흐름
OIDC는 OAuth 2.0의 흐름에 다음과 같은 단계를 추가한다:
- ID 토큰 수신: 클라이언트는 권한 부여 서버로부터 액세스 토큰과 함께 ID 토큰을 수신한다.
- ID 토큰 검증: 클라이언트는 ID 토큰의 서명과 클레임을 검증하여 사용자의 신원을 확인한다.
- 사용자 정보 요청(선택 사항): 클라이언트는 필요에 따라 사용자 정보 엔드포인트를 통해 추가적인 사용자 정보를 요청할 수 있다.
OAuth 2.0과 OIDC의 차이점
- 목적:
- OAuth 2.0: 권한 부여(Authorization)
- OIDC: 인증(Authentication) 및 권한 부여
- 토큰:
- OAuth 2.0: Access Token만 사용
- OIDC: Access Token과 ID Token을 모두 사용
- 사용자 정보:
- OAuth 2.0: 토큰에 사용자 정보가 포함되지 않음
- OIDC: ID Token에 사용자 정보가 포함됨
MSA에서의 활용
MSA 환경에서 OAuth 2.0과 OIDC를 활용하면 다음과 같은 이점이 있다:
- 중앙 집중식 인증: 모든 마이크로서비스가 단일 인증 서버를 사용할 수 있어 일관된 보안 정책을 적용할 수 있다.
- 토큰 기반 인증: 상태를 저장하지 않는(stateless) 토큰 기반 인증으로 마이크로서비스 간 통신을 더 효율적으로 만든다.
- 세분화된 권한 제어: OAuth 2.0의 스코프를 활용하여 각 마이크로서비스에 대한 접근 권한을 세밀하게 제어할 수 있다.
- 사용자 경험 개선: OIDC를 통한 SSO(Single Sign-On)로 사용자는 한 번의 로그인으로 여러 서비스를 이용할 수 있다.
- 보안 강화: 인증 로직을 중앙화하여 각 마이크로서비스의 보안 복잡성을 줄이고, 전체적인 시스템 보안을 향상시킬 수 있다.