본문으로 건너뛰기
SDETRole
SDETRole

용어집 · API 테스트

OAuth 2.0

다른 이름: OAuth, OAuth2, OAuth 2, 오어스

정의

애플리케이션이 비밀번호를 다루지 않고도 사용자나 자기 자신을 대신해 API를 호출할 수 있도록 제한된 액세스 토큰을 발급받게 하는 인가 프레임워크입니다.

OAuth 2.0은 위임된 인가(delegated authorization)를 위한 프레임워크입니다. 앱에 비밀번호를 넘기는 대신 인가 서버에서 요청을 승인하면, 인가 서버가 앱에 범위(scope, 예: orders:read)와 유효 시간이 제한된 액세스 토큰을 발급합니다. 앱은 이 토큰을 보통 Authorization: Bearer <token> 형태로 API에 보냅니다. 네 가지 역할은 리소스 소유자(사용자), 클라이언트(앱), 인가 서버(토큰 발급), 리소스 서버(API)입니다.

인증(Authentication)과 인가(Authorization)

인증은 “당신은 누구입니까?“에 답합니다. 인가는 “당신은 무엇을 할 수 있습니까?“에 답합니다. OAuth 2.0 자체는 인가에 관한 것입니다. 액세스 토큰은 소지자가 무엇에 접근할 수 있는지를 말해 줄 뿐, 사용자가 누구인지를 신뢰성 있게 알려 주지는 않습니다. 사용자 로그인은 OpenID Connect의 역할입니다. OpenID Connect는 OAuth 2.0 위에 올라가는 계층으로, 사용자를 설명하는 ID 토큰(JWT)을 추가합니다. “…로 로그인” 버튼은 OpenID Connect를 사용합니다.

주요 그랜트 유형

  • PKCE를 사용하는 인가 코드(Authorization code): 브라우저 앱과 모바일 앱을 포함해 사용자를 대신해 동작하는 앱을 위한 방식입니다. 사용자가 인가 서버에서 로그인하면 앱은 수명이 짧은 코드를 받고, 이를 토큰으로 교환합니다.
  • 클라이언트 자격 증명(Client credentials): 사용자 없이 서비스 간에 호출하는 경우를 위한 방식입니다. API 테스트 스위트에서 가장 많이 쓰는 플로우입니다.
  • 리프레시 토큰(Refresh token): 수명이 긴 리프레시 토큰을 새 액세스 토큰으로 교환합니다.

암묵적(implicit) 그랜트와 리소스 소유자 비밀번호(resource owner password) 그랜트는 현재 OAuth 보안 가이드에서 사용을 권장하지 않으며, OAuth 2.1 초안에서는 제외되었습니다.

예시: 클라이언트 자격 증명

curl -X POST https://auth.example.com/oauth/token \
  -d grant_type=client_credentials \
  -d client_id="$CLIENT_ID" \
  -d client_secret="$CLIENT_SECRET" \
  -d scope=orders:read

응답에는 access_token, 값이 Bearer인 token_type, 초 단위의 expires_in이 들어 있습니다. 토큰은 픽스처에서 한 번 받아 만료가 가까워질 때까지 캐시하고, 클라이언트 시크릿은 저장소가 아니라 CI 시크릿에 보관하십시오.

무엇을 테스트할까

  • 토큰이 없거나, 만료되었거나, 형식이 잘못되면 401을 반환합니다.
  • 유효한 토큰이라도 필요한 scope가 없으면 403을 반환합니다.
  • 다른 audience나 다른 클라이언트용으로 발급된 토큰은 거부됩니다.
  • 인가 코드 플로우에서는 state 파라미터를 검사하고, 리다이렉트 URI가 등록된 값과 정확히 일치해야 합니다.
  • 토큰 응답과 리다이렉트 과정에서 토큰이 로그나 URL에 노출되지 않습니다.

SDETRole 전체에서 검색할 내용을 입력하세요.

Pagefind 전문 검색 · 브라우저에서 실행됩니다 검색 페이지 열기 →