이번 강의에서는 OAuth2 프레임워크 내의 Authorization Code Grant Type Flow를 소개하고, 클라이언트 애플리케이션이 어떻게 인증 및 권한 부여를 통해 마이크로서비스와 통신할 수 있는지 살펴봅니다. 이 흐름은 특히 웹 애플리케이션이나 모바일 애플리케이션과 같은 UI 애플리케이션과 연관된 시나리오에서 사용됩니다.
Authorization Code Grant Type Flow 개요
이 흐름에서는 사용자, 클라이언트, 인증 서버(Auth Server), 자원 서버(Resource Server)라는 네 가지 주요 역할이 등장합니다. 아래는 흐름의 각 단계입니다:
-
사용자 → 클라이언트 애플리케이션:
- 사용자는 브라우저나 모바일 애플리케이션을 통해 클라이언트 애플리케이션에 접근하여 자신의 자원에 접근하고자 합니다.
-
클라이언트 → 인증 서버:
- 클라이언트 애플리케이션은 사용자를 인증 서버로 리다이렉트합니다. 사용자는 인증 서버의 로그인 페이지에서 자신의 자격 증명(아이디, 비밀번호)을 입력합니다.
-
인증 서버 → 클라이언트:
- 인증 서버가 사용자의 자격 증명을 확인한 후, Authorization Code를 클라이언트 애플리케이션에 발급합니다.
- 이 코드는 액세스 토큰이 아니며, 클라이언트는 이 코드를 사용하여 나중에 액세스 토큰을 요청할 수 있습니다.
-
클라이언트 → 인증 서버:
- 클라이언트는 Authorization Code를 사용해 인증 서버에 액세스 토큰을 요청합니다. 이때 클라이언트 ID와 비밀 키(client secret)도 함께 전송합니다.
- 인증 서버가 Authorization Code와 클라이언트의 자격 증명을 확인하면 액세스 토큰을 발급합니다.
-
클라이언트 → 자원 서버:
- 클라이언트 애플리케이션은 액세스 토큰을 사용하여 자원 서버에 요청을 보냅니다. 자원 서버는 이 토큰의 유효성을 인증 서버를 통해 검증한 후 요청을 처리하고 응답을 반환합니다.
주요 개념 설명
- Authorization Code: 인증 서버가 사용자 자격 증명을 확인한 후 클라이언트에게 발급하는 임시 코드입니다. 이 코드는 나중에 액세스 토큰으로 교환됩니다.
- Redirect URI: 인증 서버가 사용자를 다시 클라이언트 애플리케이션으로 리다이렉트할 때 사용할 URL입니다.
- Scope: 클라이언트 애플리케이션이 요청하는 권한의 범위를 나타냅니다.
- State: CSRF 공격을 방지하기 위해 사용되는 임의로 생성된 값입니다. 인증 과정에서 상태를 추적하는 데 사용됩니다.
데모 및 실습
OAuth2 Authorization Code Grant Type Flow를 테스트하기 위해 OAuth2 Playground 웹사이트를 사용합니다:
- 클라이언트 등록:
- OAuth2 Playground에서 클라이언트 애플리케이션을 등록하고 클라이언트 ID와 비밀 키를 생성합니다.
- 사용자 인증:
- 사용자가 인증 서버에 로그인하고 클라이언트 애플리케이션에 권한을 부여합니다.
- 인증 서버는 Authorization Code를 발급합니다.
- Authorization Code를 사용하여 액세스 토큰 요청:
- 클라이언트 애플리케이션이 Authorization Code를 사용해 액세스 토큰을 요청합니다.
- 인증 서버가 액세스 토큰을 발급하면 이를 사용해 자원 서버에 요청을 보냅니다.
요약
Authorization Code Grant Type Flow는 보안성을 강화하기 위해 두 단계의 인증 절차를 포함합니다. 이 흐름은 사용자가 자격 증명을 클라이언트 애플리케이션과 직접 공유하지 않고, 인증 서버를 통해 처리되도록 설계되어 있습니다. 이렇게 함으로써 클라이언트 애플리케이션과 자원 서버 간의 통신이 보다 안전하게 유지됩니다.
감사합니다. 다음 강의에서 더욱 심도 있는 내용을 다루도록 하겠습니다. 안녕히 계세요!