๐ŸŽฏ OAuth2 & OpenID Connect - OAuth2 ํ”„๋กœํ† ์ฝœ๊ณผ OpenID Connect ํ™•์žฅ ๊ตฌ์กฐ ์™„์ „ ์ •๋ณต

okorionยท2025๋…„ 10์›” 6์ผ

๐Ÿ” Spring Security 6

๋ชฉ๋ก ๋ณด๊ธฐ
7/10

๐Ÿงญ 1. OAuth2๋ž€ ๋ฌด์—‡์ธ๊ฐ€

OAuth2(Open Authorization 2.0)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ๊ถŒํ•œ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ„์ž„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ž๊ฒฉ ์ฆ๋ช…์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: PhotoEditor)์ด ๋‚˜๋ฅผ ๋Œ€์‹ ํ•ด ๋‚ด Google Photo ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์œ„์ž„ํ•œ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ฐœ๋…

  • OAuth2๋Š” ์ธ๊ฐ€(Authorization) ํ‘œ์ค€์ด๋‹ค.
  • โ€œ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€โ€๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
  • โ€œ๋ˆ„๊ฐ€ ๋กœ๊ทธ์ธํ–ˆ๋Š”๊ฐ€โ€(์ธ์ฆ)๋Š” ์›๋ž˜ ๋ชฉ์ ์ด ์•„๋‹ˆ์—ˆ์œผ๋‚˜, ์ดํ›„ OpenID Connect๊ฐ€ ์ด๋ฅผ ํ™•์žฅํ–ˆ๋‹ค.

๐Ÿ’ฌ 2. OAuth2๊ฐ€ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ

โœ… ๋ฌธ์ œ 1. ํ†ตํ•ฉ ์ธ์ฆ ๋ฌธ์ œ (Google ์‚ฌ๋ก€)

  • Gmail, YouTube, Maps, Drive ๋“ฑ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์•ฑ์ด์ง€๋งŒ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์ธ์ฆ ์„œ๋ฒ„(Auth Server)๋ฅผ ๊ณต์œ ํ•œ๋‹ค.
  • ์ด ๊ณตํ†ต ์ธ์ฆ ์„œ๋ฒ„๊ฐ€ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜์—ฌ ํ•œ ๋ฒˆ ๋กœ๊ทธ์ธ์œผ๋กœ ์ „์ฒด ์•ฑ ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

๐Ÿ‘‰ ์กฐ์ง ๋‚ด์—์„œ ๋ณด์•ˆ ๋กœ์ง์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๊ณ ,

์„œ๋น„์Šค(๋ฆฌ์†Œ์Šค ์„œ๋ฒ„)๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ๋‹ด๋‹นํ•˜๊ฒŒ ํ•œ๋‹ค.


โœ… ๋ฌธ์ œ 2. ์œ„์ž„๋œ ์ ‘๊ทผ (Delegated Access)

PhotoEditor๊ฐ€ ๋‚ด Google Photos์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ:

์‹œ๋‚˜๋ฆฌ์˜ค๋ฌธ์ œ
OAuth2 ์—†์Œ์‚ฌ์šฉ์ž๊ฐ€ PhotoEditor์— Google ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•ด์•ผ ํ•จ โ†’ ๋งค์šฐ ์œ„ํ—˜
OAuth2 ์žˆ์ŒGoogle์ด ๋Œ€์‹  Access Token์„ ๋ฐœ๊ธ‰ โ†’ PhotoEditor๋Š” ์‚ฌ์ง„ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅ

๐Ÿ“Œ ์‚ฌ์šฉ์ž๋Š” ์–ธ์ œ๋“ ์ง€ Google ๊ณ„์ •์—์„œ PhotoEditor์˜ ๊ถŒํ•œ์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

OAuth2์˜ ์ง„์ •ํ•œ ๋ชฉ์ ์€ ์ด โ€œ์œ„์ž„๋œ ์ธ๊ฐ€โ€์ด๋‹ค.


๐Ÿงฉ 3. OAuth2์˜ ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ์„ฑ์š”์†Œ์„ค๋ช…์˜ˆ์‹œ
Resource Owner์ž์›์„ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์žGoogle Photos์˜ โ€˜์‚ฌ์ง„ ์ฃผ์ธโ€™
Client์ž์›์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์•ฑPhotoEditor
Authorization Serverํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๋‹ด๋‹นGoogle Auth Server
Resource Server์‹ค์ œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ €์žฅํ•˜๊ณ  ์ œ๊ณตGoogle Photos API
Scope์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„ (read/write ๋“ฑ)read:user, photos:read


๐Ÿ” 4. OAuth2 ํ† ํฐ์˜ ์ข…๋ฅ˜

ํ† ํฐ ์ข…๋ฅ˜์—ญํ• ์œ ํšจ๊ธฐ๊ฐ„๋น„๊ณ 
Access Token์‹ค์ œ API ํ˜ธ์ถœ ๊ถŒํ•œ์งง์Œ (์ˆ˜๋ถ„~์ˆ˜์‹œ๊ฐ„)์š”์ฒญ๋งˆ๋‹ค ํฌํ•จ
Refresh TokenAccess Token ์žฌ๋ฐœ๊ธ‰์šฉ๊น€ (์ˆ˜์ผ~์ˆ˜๊ฐœ์›”)๋ธŒ๋ผ์šฐ์ €ยท์•ฑ์— ์•ˆ์ „ํžˆ ๋ณด๊ด€
ID Token (OIDC)์‚ฌ์šฉ์ž ์ •๋ณด(JWT) ํฌํ•จ์งง์Œ์ธ์ฆ์šฉ (OpenID Connect ํ™•์žฅ)

Access Token์€ โ€œ์ถœ์ž…์ฆโ€, Refresh Token์€ โ€œ์žฌ๋ฐœ๊ธ‰๊ถŒโ€,

ID Token์€ โ€œ์‹ ๋ถ„์ฆโ€์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.


โš™๏ธ 5. Grant Type (๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ์‹)

OAuth2๋Š” ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ•ด ๋‹ค์„ฏ ๊ฐ€์ง€ Grant Type์„ ์ •์˜ํ•œ๋‹ค.

์ด ์ค‘ ํ˜„์žฌ๋Š” 3๊ฐ€์ง€๋งŒ ํ‘œ์ค€์œผ๋กœ ์œ ์ง€๋œ๋‹ค.

Grant Type์‚ฌ์šฉ ์‹œ์ ์‚ฌ์šฉ์ž ์ฐธ์—ฌ์ƒํƒœ์„ค๋ช…
Authorization Code + PKCESPA, ์›น, ๋ชจ๋ฐ”์ผ์žˆ์Œโœ… ์œ ์ง€๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ ํ๋ฆ„
Client Credentials์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์—†์Œโœ… ์œ ์ง€๋ฐฑ์—”๋“œ-๋ฐฑ์—”๋“œ ํ†ต์‹ ์šฉ
Refresh TokenAccess Token ๊ฐฑ์‹ ์—†์Œโœ… ์œ ์ง€์„ธ์…˜ ์ง€์†์šฉ
Implicit๊ตฌ๋ฒ„์ „ SPA์žˆ์ŒโŒ ํ๊ธฐ ์˜ˆ์ •ํ† ํฐ ๋…ธ์ถœ ์œ„ํ—˜
Password Grant๋‚ด๋ถ€ ๋‹จ์ผ ์‹œ์Šคํ…œ์žˆ์ŒโŒ ํ๊ธฐ ์˜ˆ์ •๋น„๋ฐ€๋ฒˆํ˜ธ ์ง์ ‘ ๋…ธ์ถœ

๐Ÿ”„ 6. Authorization Code Flow

์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ จ๋œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ OAuth2 ํ๋ฆ„.

๐Ÿ’ก Access Token์€ ์ธ์ฆ ์„œ๋ฒ„์™€ Resource ์„œ๋ฒ„๊ฐ€ ๋ณ„๊ฐœ์—ฌ๋„

JWT ์„œ๋ช… ๊ฒ€์ฆ์œผ๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ณต๊ฐœํ‚ค ๊ฒ€์ฆ)


๐Ÿ”‘ 7. PKCE (Proof Key for Code Exchange)

SPA๋‚˜ ๋ชจ๋ฐ”์ผ ์•ฑ์ฒ˜๋Ÿผ client_secret์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๊ฐœ์„ ๋œ ํ๋ฆ„.

์šฉ์–ด์„ค๋ช…
Code Verifierํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๋žœ๋ค ๋ฌธ์ž์—ด
Code ChallengeVerifier์˜ SHA256 ํ•ด์‹œ
Code Challenge Methodํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (S256 ๋“ฑ)

๐ŸŽฏ ํ•ต์‹ฌ: Code Challenge๋ฅผ ํƒˆ์ทจํ•ด๋„ Code Verifier๋ฅผ ์•Œ ์ˆ˜ ์—†์–ด,

์•…์˜์  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ† ํฐ์„ ์–ป์ง€ ๋ชปํ•จ.


โš™๏ธ 8. Client Credentials Flow

๋‘ ์„œ๋ฒ„(๋ฐฑ์—”๋“œ ๊ฐ„ ํ†ต์‹ ) ๊ฐ„์˜ ์ธ์ฆ์„ ์œ„ํ•ด ์‚ฌ์šฉ.

์‚ฌ์šฉ์ž ์—†์ด ํด๋ผ์ด์–ธํŠธ ID/Secret์œผ๋กœ ํ† ํฐ์„ ์š”์ฒญํ•œ๋‹ค.

๐Ÿงฑ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.


โ™ป๏ธ 9. Refresh Token Flow

Access Token์ด ๋งŒ๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” Refresh Token์œผ๋กœ ์ƒˆ ํ† ํฐ์„ ์š”์ฒญํ•œ๋‹ค.

๐Ÿ”„ Refresh Token๋„ ์œ ํšจ๊ธฐ๊ฐ„์ด ์žˆ์œผ๋ฉฐ,

โ€œoffline_accessโ€ scope๋ฅผ ์ฃผ๋ฉด ๋งŒ๋ฃŒ๋˜์ง€ ์•Š๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅ (๋น„๊ถŒ์žฅ).


๐Ÿงฑ 10. Token ๊ฒ€์ฆ ๋ฐฉ์‹

๊ฒ€์ฆ ๋ฐฉ์‹์„ค๋ช…์žฅ์ ๋‹จ์ 
Remote IntrospectionResource Server โ†’ Auth Server /introspect ํ˜ธ์ถœ์‹ค์‹œ๊ฐ„ ํ† ํฐ ํ๊ธฐ ๊ฐ€๋Šฅ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ๋ฐœ์ƒ
Local Verification (JWT + JWKS)Resource Server๊ฐ€ ๊ณต๊ฐœํ‚ค๋กœ ์ž์ฒด ๊ฒ€์ฆ๋น ๋ฅด๊ณ  ๋…๋ฆฝ์ ํ† ํฐ ์ฆ‰์‹œ ํ๊ธฐ ๋ถˆ๊ฐ€

๐Ÿ’ก ๋Œ€๋ถ€๋ถ„์˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ๋Š” JWT + JWKS ๊ฒ€์ฆ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•œ๋‹ค.


๐Ÿ‘ฅ 11. OpenID Connect (OIDC)

OAuth2 ์œ„์— ์–‡๊ฒŒ ๋ง์”Œ์›Œ์ง„ ์ธ์ฆ ํ”„๋กœํ† ์ฝœ ๋ ˆ์ด์–ด.

OAuth2๊ฐ€ โ€œ์ธ๊ฐ€โ€๋ฅผ ๋‹ด๋‹นํ–ˆ๋‹ค๋ฉด, OIDC๋Š” โ€œ๋ˆ„๊ฐ€ ๋กœ๊ทธ์ธํ–ˆ๋Š”๊ฐ€โ€๋ฅผ ํ‘œ์ค€ํ™”ํ•œ๋‹ค.

๋น„๊ต ํ•ญ๋ชฉOAuth2OpenID Connect
๋ชฉ์ ์ธ๊ฐ€ (Authorization)์ธ์ฆ (Authentication)
ํ•ต์‹ฌ ํ† ํฐAccess TokenID Token (JWT)
Scoperead, photos, email ๋“ฑopenid, profile, email ๋“ฑ
ํ‘œ์ค€ API-/userinfo
์ฃผ์š” ์‚ฌ์šฉ์ฒ˜API ์ ‘๊ทผ ๊ถŒํ•œ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹๋ณ„

โœ… OIDC๋Š” openid ์Šค์ฝ”ํ”„๊ฐ€ ์ถ”๊ฐ€๋œ OAuth2 ์š”์ฒญ์ผ ๋ฟ์ด๋‹ค.

์ฆ‰, โ€œAuthorization Code Flow + openid scopeโ€ = OIDC.


๐Ÿชช 12. ID Token ๋‚ด๋ถ€ ๊ตฌ์กฐ ์˜ˆ์‹œ

JWT ํ˜•์‹์œผ๋กœ ๋ฐœ๊ธ‰๋˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.

{
  "sub": "112233",
  "name": "Eazy Bytes",
  "email": "tutor@eazybytes.com",
  "aud": "client_app_123",
  "iss": "https://accounts.google.com",
  "iat": 1714200000,
  "exp": 1714203600
}

๐Ÿง  13. ์š”์•ฝ ๋‹ค์ด์–ด๊ทธ๋žจ


๐Ÿš€ 14. ํ•™์Šต ํฌ์ธํŠธ ์ •๋ฆฌ

ํ•™์Šต ํ•ญ๋ชฉ์š”์•ฝ
OAuth2 ํ•ต์‹ฌ ๋ชฉ์ ์ธ์ฆ์ด ์•„๋‹Œ ์ธ๊ฐ€(Authorization) ํ‘œ์ค€
์ธ์ฆ ํ™•์žฅOpenID Connect๊ฐ€ Authentication ๊ณ„์ธต์„ ์ œ๊ณต
๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€PKCE + ์งง์€ ๋งŒ๋ฃŒ ํ† ํฐ + HTTPS
๊ฒ€์ฆ ์ „๋žตJWT + JWKS ๊ณต๊ฐœํ‚ค ๊ฒ€์ฆ ๋ฐฉ์‹
์กฐ์ง ๋‚ด ๊ตฌ์„ฑAuth Server โ†” Resource Server ๋ถ„๋ฆฌ ๊ตฌ์กฐ
profile
Tech Archive 2026

0๊ฐœ์˜ ๋Œ“๊ธ€