OAuth - 3sam5oh/webtoon-search-service GitHub Wiki

์ •์˜

์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž๋“ค์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์›น์‚ฌ์ดํŠธ ์ƒ์˜ ์ž์‹ ๋“ค์˜ ์ •๋ณด์— ๋Œ€ํ•ด ์›น์‚ฌ์ดํŠธ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต์ ์ธ ์ˆ˜๋‹จ์œผ๋กœ์„œ ์‚ฌ์šฉ๋˜๋Š”, > ์ ‘๊ทผ ์œ„์ž„์„ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€์ด๋‹ค.
์œ„ํ‚ค๋ฐฑ๊ณผ ์ฐธ์กฐ


๊ตฌ์„ฑ์š”์†Œ

  1. Resource Owner

    • ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค(์‚ฌ์šฉ์ž์˜ ๊ณ„์ •์ •๋ณด)๋ฅผ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์ž
    • ex) ์›น ์„œ๋น„์Šค ์‚ฌ์šฉ์ž
  2. Client

    • ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
    • ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๋ฐ›์•ผ์•„ํ•จ.
    • ex) ์›น/๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  3. Authorization Server

    • ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž๊ฐ€ ์ธ์ฆ๋œ ํ›„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์„œ๋ฒ„
    • ํด๋ผ์ด์–ธํŠธ์˜ ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•จ.
    • ex) OAuth ์ œ๊ณต์—…์ฒด(naver ..)์˜ ์ธ์ฆ์„œ๋ฒ„
  4. Resource Server

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋Š” ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹ค์ œ๋กœ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ํ™•์ธํ•œ ํ›„ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
    • ex) api์„œ๋ฒ„
  5. Access Token

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ธ์ฆ ํ† ํฐ
    • ๊ถŒํ•œ ์„œ๋ฒ„์— ์˜ํ•ด ๋ฐœ๊ธ‰๋˜๋ฉฐ, ์ œํ•œ๋œ ๊ธฐ๊ฐ„ ๋™์•ˆ ์œ ํšจ
    • ex) JWT
  6. Refresh Token

    • ์•ก์„ธ์Šค ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ† ํฐ

์›๋ฆฌ

OAuth์›๋ฆฌ


yml ์„ค์ •

  • ๋„ค์ด๋ฒ„๋Š” OAuth2.0 ๊ณต์‹ ์ง€์›๋Œ€์ƒ์ด ์•„๋‹ˆ๋ผ์„œ ๋ณ„๋„๋กœ "naver"๋ผ๋Š” provider๋ฅผ ๋“ฑ๋กํ•ด์ค˜์•ผํ•จ
  • ๋„ค์ด๋ฒ„๊ฐœ๋ฐœ์ž์„ผํ„ฐ์˜ callback ์ฃผ์†Œ์™€ yml์˜ redirect์˜ ์ฃผ์†Œ๋Š” ๊ฐ™์•„์•ผํ•จ

    > image



๋„ค์ด๋ฒ„ OAuth 2.0 Authorization Code Flow

  1. Resource Owner(์‚ฌ์šฉ์ž)๊ฐ€ client ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผ

์‚ฌ์šฉ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„ค์ด๋ฒ„๋กœ ๋กœ๊ทธ์ธํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•จ.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋„ค์ด๋ฒ„ ๊ถŒํ•œ ์„œ๋ฒ„์— ์ธ์ฆ ์š”์ฒญ

ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋„ค์ด๋ฒ„์˜ ๊ถŒํ•œ ์„œ๋ฒ„๋กœ ์ธ์ฆ ์š”์ฒญ์„ ๋ณด๋ƒ„
์ด ์š”์ฒญ์—๋Š” ํด๋ผ์ด์–ธํŠธ ID, ๋ฆฌ๋””๋ ‰์…˜ URI, ์‘๋‹ต ์œ ํ˜•(code), ๊ทธ๋ฆฌ๊ณ  ์š”์ฒญ๋œ ๊ถŒํ•œ ๋ฒ”์œ„(scope)๊ฐ€ ํฌํ•จ.
ex) https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id={CLIENT_ID}&redirect_uri=REDIRECT_URI&state=STATE
response_type=code: ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
client_id: ๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ ID
redirect_uri: ์ธ์ฆ ํ›„ ๋ฆฌ๋””๋ ‰์…˜๋  ํด๋ผ์ด์–ธํŠธ์˜ URI
state: CSRF ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ ํ•œ ์ƒํƒœ ๊ฐ’

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋„ค์ด๋ฒ„ ๊ถŒํ•œ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ

์‚ฌ์šฉ์ž๋Š” ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ ์ž์‹ ์˜ ๋„ค์ด๋ฒ„ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ๋กœ๊ทธ์ธ ํ›„, ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญํ•œ ๊ถŒํ•œ(์˜ˆ: ํ”„๋กœํ•„ ์ •๋ณด ์ ‘๊ทผ ๋“ฑ)์— ๋Œ€ํ•ด ํ—ˆ์šฉํ•  ๊ฒƒ์ธ์ง€ ๋ฌป๋Š” ํ™”๋ฉด์ด ํ‘œ์‹œ.

์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ฉด, ๋„ค์ด๋ฒ„ ๊ถŒํ•œ ์„œ๋ฒ„๋Š” ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑ

  1. ๋„ค์ด๋ฒ„ ๊ถŒํ•œ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ธ์ฆ ์ฝ”๋“œ ์ „๋‹ฌ

์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋ฉด, ๋„ค์ด๋ฒ„ ๊ถŒํ•œ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋„ค์ด๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋„ค์ด๋ฒ„ ๊ถŒํ•œ ์„œ๋ฒ„์— ํ† ํฐ ์š”์ฒญ

์ธ์ฆ ์ฝ”๋“œ, ํด๋ผ์ด์–ธํŠธ ID ๋ฐ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ(๋น„๋ฐ€ํ‚ค), ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋””๋ ‰์…˜ URI๊ฐ€ ํฌํ•จ

  1. ๋„ค์ด๋ฒ„ ๊ถŒํ•œ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์•ก์„ธ์Šค ํ† ํฐ ์ „๋‹ฌ

  2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•ด ๋„ค์ด๋ฒ„ API์— ์š”์ฒญ

ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐœ๊ธ‰๋ฐ›์€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•ด ๋„ค์ด๋ฒ„ API์— ์š”์ฒญ ์ด๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฒ€์ฆํ•œ ํ›„ ์š”์ฒญ๋œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜

โš ๏ธ **GitHub.com Fallback** โš ๏ธ