Authorization Code는 OAuth 2.0에서 사용되는 인증 및 인가 프로세스의 핵심 요소 중 하나입니다.
특히 Authorization Code Grant 플로우에서 클라이언트(애플리케이션)가 액세스 토큰(Access Token)을 발급받기 위해 인증 서버로부터 받는 임시 코드입니다.
Authorization Code의 동작 원리
- 클라이언트(예: 웹 애플리케이션, 모바일 앱)가 리소스 소유자(사용자)를 대신하여 인증 서버에 접근 권한을 요청합니다.
- 사용자는 인증 서버에서 로그인 및 권한 승인을 수행합니다.
- 인증 서버는 클라이언트에게 Authorization Code를 전달합니다.
- 클라이언트는 받은 Authorization Code를 이용해 Access Token을 요청합니다.
- 인증 서버는 Authorization Code의 유효성을 검증하고 Access Token을 발급합니다.
Authorization Code Grant 흐름 예시
인증 요청 단계
클라이언트가 브라우저를 통해 사용자에게 로그인 및 권한을 요청합니다.GET /authorize?response_type=code &client_id=CLIENT_ID &redirect_uri=CALLBACK_URL &scope=read_profile &state=RANDOM_STRING
- response_type=code: Authorization Code를 요청하겠다는 의미입니다.
- redirect_uri: 인증 후 사용자를 리디렉션할 URI.
- state: CSRF 공격 방지를 위해 클라이언트가 생성하는 난수값입니다.
Authorization Code 전달
사용자가 로그인 및 권한을 승인하면, 인증 서버는 Redirect URI로 Authorization Code를 전달합니다.HTTP/1.1 302 Found Location: https://example.com/callback?code=AUTHORIZATION_CODE&state=RANDOM_STRING
Access Token 요청
클라이언트는 Authorization Code를 사용하여 Access Token을 요청합니다.POST /token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code code=AUTHORIZATION_CODE redirect_uri=CALLBACK_URL client_id=CLIENT_ID client_secret=CLIENT_SECRET
Access Token 반환
인증 서버는 Authorization Code를 검증한 후 Access Token을 반환합니다.{ "access_token": "ACCESS_TOKEN_VALUE", "token_type": "Bearer", "expires_in": 3600 }
Authorization Code의 특징
단기 유효성
- Authorization Code는 한 번만 사용되며, 짧은 시간 동안만 유효합니다.
보안 강화
- Authorization Code는 클라이언트와 인증 서버 간의 추가적인 확인 과정(Access Token 발급 과정)을 거치기 때문에 중간자 공격으로부터 보호됩니다.
Client Secret 사용
- Access Token 요청 시 Client Secret(보안 키)을 함께 사용함으로써 추가적인 보안을 제공합니다.
정리
✅ Authorization Code: OAuth 2.0에서 Access Token 발급 전 반환되는 임시 코드입니다.
✅ 보안 강화: Access Token을 바로 노출하지 않고 두 단계로 발급하여 보안을 높입니다.
✅ 사용처: 웹 애플리케이션, 모바일 앱 등 보안이 필요한 환경에서 사용됩니다.
'OAuth' 카테고리의 다른 글
OAuth 2.0 액세스 토큰 발급 방법 (0) | 2024.12.17 |
---|---|
Spring Authorization Server 구성 (0) | 2024.12.17 |
Proof Key(PKCE) (0) | 2024.12.17 |
투명 토큰(Transparent Token)과 불투명 토큰(Opaque Token) (1) | 2024.12.17 |
OAuth(Open Authorization) (0) | 2024.12.17 |