OAuth 2.0[1] 은 인가(authorization) 프레임워크다. 사용자가 자기 비밀번호를 제3자 애플리케이션에 주지 않고도, 그 애플리케이션이 사용자 대신 API 를 제한된 범위(scope)로 쓰도록 허락하는 방법을 정한다. 결과물은 access token 이며, 자원 서버는 이 토큰을 보고 요청을 허용한다[2].
OpenID Connect(OIDC)[3] 는 OAuth 2.0 위에 얹은 인증(authentication) 계층이다. access token 과 함께 서명된 JWT 인 ID token 을 내려 주어 "누가 로그인했는가" 를 애플리케이션이 검증할 수 있게 한다. 로그인(SSO)이 목적이면 OIDC, API 접근 위임만 목적이면 OAuth 2.0 이다. 실무에서는 거의 항상 둘을 함께 쓴다.
| 역할 | 뜻 | 예 |
|---|---|---|
| Resource Owner | 자원의 주인. 보통 사용자 | 사람 |
| Client | 사용자 대신 자원에 접근하려는 애플리케이션 | 웹앱 · 모바일 앱 · CLI |
| Authorization Server | 사용자를 인증하고 토큰을 발급 | Keycloak · Ory Hydra · Google |
| Resource Server | 토큰을 검사하고 API 를 제공 | REST API · 게이트웨이 |
OIDC 에서는 Authorization Server 를 OpenID Provider(OP), Client 를 Relying Party(RP) 라고 부른다.
현행 보안 지침(RFC 9700)[4]이 권하는 것과 권하지 않는 것을 나눠 적는다.
| 흐름 | 쓰는 곳 | 요점 |
|---|---|---|
| Authorization Code + PKCE[5] | 브라우저 로그인 전부(서버 웹앱 · SPA · 네이티브 앱[6]) | 사용자를 인가 서버로 보내 로그인시키고, 돌아온 code 를 토큰으로 바꾼다. PKCE 는 code 가로채기를 막는다 |
| Client Credentials | 사용자 없는 서비스 간 호출 | client id/secret 으로 바로 access token 을 받는다 |
| Refresh Token | 위 두 흐름의 보조 | access token 을 짧게 두고 refresh token 으로 갱신한다 |
| Device Authorization[7] | 키보드 · 브라우저가 없는 장치(TV · CLI) | 장치가 코드를 보여 주고 사용자가 다른 기기에서 승인한다 |
| 토큰 | 준 것 | 받는 쪽 | 형식 |
|---|---|---|---|
| Access token | 자원 접근 권한 | Resource Server | 불투명 문자열 또는 JWT. 짧게(수 분 ~ 1시간) |
| ID token | 사용자 신원(OIDC) | Client | JWT. iss · sub · aud · exp · nonce 를 검증한다 |
| Refresh token | 새 access token 을 받을 권리 | Authorization Server | 불투명. 길게, 회전(rotation) 시킨다 |
자원 서버는 access token 을 Authorization: Bearer <token> 헤더로 받는다[2:1]. JWT 이면 OP 의 공개키(JWKS)로 서명을 검증하고, 불투명 토큰이면 introspection 끝점에 물어본다.
OIDC 서버는 https://<issuer>/.well-known/openid-configuration 에 끝점 목록을 공개한다[8]. 클라이언트 설정에 issuer 하나만 적어도 나머지를 찾을 수 있는 이유다.
| 끝점 | 역할 |
|---|---|
authorization_endpoint |
사용자를 보내 로그인 · 동의를 받는 곳 |
token_endpoint |
code · refresh token · client credentials 를 토큰으로 바꾸는 곳 |
userinfo_endpoint |
access token 으로 사용자 속성(claims)을 읽는 곳 |
jwks_uri |
토큰 서명 검증용 공개키 |
introspection_endpoint · revocation_endpoint |
토큰 상태 확인 · 폐기 |
end_session_endpoint |
로그아웃 |
curl -s https://auth.example.com/realms/master/.well-known/openid-configuration | jq .issuer,.authorization_endpoint,.token_endpoint
이 위키에서 다루는 인가 서버는 둘이다. 사용자 저장소 · 로그인 화면 · 관리 UI 까지 한 제품에서 끝내려면 Keycloak, OAuth2/OIDC 프로토콜 처리만 맡기고 로그인 · 동의 화면은 직접 만들려면 Ory Hydra 다.
RFC 6749 — The OAuth 2.0 Authorization Framework. 2026-09-20 확인. https://www.rfc-editor.org/rfc/rfc6749.html ↩︎
RFC 6750 — Bearer Token Usage. 2026-09-20 확인. https://www.rfc-editor.org/rfc/rfc6750.html ↩︎ ↩︎
OpenID Connect Core 1.0. 2026-09-20 확인. https://openid.net/specs/openid-connect-core-1_0.html ↩︎
RFC 9700 — Best Current Practice for OAuth 2.0 Security. 2026-09-20 확인. https://www.rfc-editor.org/rfc/rfc9700.html ↩︎
RFC 7636 — Proof Key for Code Exchange (PKCE). 2026-09-20 확인. https://www.rfc-editor.org/rfc/rfc7636.html ↩︎
RFC 8252 — OAuth 2.0 for Native Apps. 2026-09-20 확인. https://www.rfc-editor.org/rfc/rfc8252.html ↩︎
RFC 8628 — OAuth 2.0 Device Authorization Grant. 2026-09-20 확인. https://www.rfc-editor.org/rfc/rfc8628.html ↩︎
OpenID Connect Discovery 1.0. 2026-09-20 확인. https://openid.net/specs/openid-connect-discovery-1_0.html · RFC 8414 (OAuth 2.0 Authorization Server Metadata) https://www.rfc-editor.org/rfc/rfc8414.html ↩︎