https://www.youtube.com/watch?v=996OiexHze0

OAuth2.0

<aside> ๐Ÿ’ก

OAuth2.0์€ Client ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๊ฒŒ ์ž์‹ ์˜ ๋ฆฌ์†Œ์Šค์— ์ œํ•œ๋œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ธ๊ฐ€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

</aside>

OAuth2.0์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

<aside> ๐Ÿ’ก

์•„๋ž˜์—์„œ ์–ธ๊ธ‰๋˜๋Š” โ€˜์„œ๋น„์Šคโ€™๋Š” OAuth2.0 ์ปจํ…์ŠคํŠธ์—์„œ๋Š” Client์ด๋‹ค.

</aside>

์–ด๋–ค ์„œ๋น„์Šค(Client)์—์„œ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์„ ์ง€์›ํ•  ๋•Œ, ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž(Resource Owner)์˜ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์— ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. OAuth2.0์ด ์—†๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž(Resource Owner)๊ฐ€ ๊ทธ๋Ÿฌํ•˜๋“ฏ ์ด ์„œ๋น„์Šค(Client)๋„ ๊ตฌ๊ธ€์— ์‚ฌ์šฉ์ž(Resource Owner)์˜ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์„œ๋น„์Šค(Client)๊ฐ€ ์‚ฌ์šฉ์ž(Resource Owner)์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์š”๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค.

๋‹น์—ฐํ•˜๊ฒŒ๋„, ์ด๋Ÿฐ ๋ฐฉ์‹์€ ์‹ค์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž(Resource Owner)๊ฐ€ ์„œ๋น„์Šค(Client)์— ์ž์‹ ์˜ ๊ตฌ๊ธ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ ๋„ ์„œ๋น„์Šค(Client)์—๊ฒŒ ์ž์‹ ์˜ ๊ตฌ๊ธ€ ์—ฐ๋ฝ์ฒ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ์ด ํ•„์š”ํ–ˆ๊ณ , ์ด๊ฒƒ์ด OAuth2.0์ด ๋“ฑ์žฅํ•œ ๋ฐฐ๊ฒฝ์ด๋‹ค.

OAuth2.0์˜ ๋™์ž‘์›๋ฆฌ

์‚ฌ์šฉ์ž(Resource Owner)์˜ ๊ตฌ๊ธ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์˜ค์ง ์‚ฌ์šฉ์ž๋งŒ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ตฌ๊ธ€์— ๋กœ๊ทธ์ธํ•˜๋Š” ๊ฒƒ๋„ ์˜ค์ง ์‚ฌ์šฉ์ž(Resource Owner)์—ฌ์•ผ๋งŒ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค(Client)๋Š” ์‚ฌ์šฉ์ž(Resource Owner)๊ฐ€ ์ง์ ‘ ๊ตฌ๊ธ€์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ด ๊ณผ์ •์—์„œ ๊ตฌ๊ธ€์˜ ์ž์›์— ์ ‘๊ทผํ•˜๋Š”๋ฐ ๋Œ€ํ•œ ๋™์˜๋ฅผ ๊ตฌํ•œ๋‹ค. ์ด๊ฒƒ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

sequenceDiagram 
	box blue FrontChannel
		participant Client
		participant Google
		participant Resource Owner
	end
	box red BackChannel
		participant Client's Server
		participant Google's Authorization Server
		participant Google's Resource Server
	end
  Client->>Resource Owner: '๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ'๊ณผ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
  Resource Owner ->> Google: ๊ตฌ๊ธ€ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋˜์–ด ๋กœ๊ทธ์ธ
  Google->>Resource Owner: Client ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Scope์— ํ•ด๋‹นํ•˜๋Š” ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์— ๋™์˜๋ฅผ ๊ตฌํ•จ
  Resource Owner->>Google: ๋™์˜
  Google->>Client: ์‚ฌ์ „์— ์•ฝ์†๋œ redirect uri ํ˜น์€ callback ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋จ. ์ด๋•Œ uri์— ์ผ์ข…์˜ ํ‹ฐ์ผ“์ธ code๊ฐ€ ํฌํ•จ๋จ(OAuth2.0 ์ปจํ…์ŠคํŠธ ์ƒ Authorization Grant)
  Client->>Client's Server: ๊ตฌ๊ธ€๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›์€ ํ‹ฐ์ผ“์ธ code๋ฅผ ์ž์‹ ์˜ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ
  
  Client's Server-->Google's Authorization Server: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์ „์— ๊ตฌ๊ธ€๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›์€ ์ž์‹ ์˜ ๋น„๋ฐ€ํ‚ค์™€ ํ•จ๊ป˜ code๋ฅผ ์ œ์ถœ
  Google's Authorization Server-->Client's Server: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ถŒํ•œ์ด ์žˆ๋‹ค๋ฉด, access token ๋ฐœํ–‰
  Client's Server-->Google's Resource Server: ๊ตฌ๊ธ€์˜ ์ธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰ ๋ฐ›์€ access token์„ ์ œ์ถœํ•˜์—ฌ ์ž์›์— ์ ‘๊ทผ

     

OpenID Connect

OAuth2.0์—์„œ ์„œ๋น„์Šค(Client)๊ฐ€ ์‚ฌ์šฉ์ž(Resource Owner)๋กœ๋ถ€ํ„ฐ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฑด ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด์ง€, ์‚ฌ์šฉ์ž์˜ ์‹ ์›(ID)์€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ Scope์— ์‚ฌ์šฉ์ž์˜ ์‹ ์› ์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ์šฐํšŒํ•˜์—ฌ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์–ด๋””๊นŒ์ง€๋‚˜ ์šฐํšŒ์•ˆ์— ๋ถˆ๊ณผํ•˜๋‹ค. OpenID Connect๋Š” ์ด๋Ÿฌํ•œ ์ธ์ฆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด OAuth2.0์„ ํ™•์žฅํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

OpenID Connect์˜ ๋™์ž‘์›๋ฆฌ

OAuth2.0์ƒ์—์„œ Scope์— openid ๋ฅผ ํฌํ•จ์‹œํ‚ค๋ฉด, ๊ตฌ๊ธ€์˜ ์ธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ access token๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ID token๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ID token์€ JWT ํ˜•์‹์˜ ํ† ํฐ์œผ๋กœ, ๋‚ด๋ถ€์— ์‚ฌ์šฉ์ž์˜ ID ์ •๋ณด(ex: email, name ๋“ฑ)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ฑฐ๋‚˜ ๋ณตํ˜ธํ™”ํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ์•ˆ์ •ํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Understanding OAuth 2.0 and OpenID Connect