Lorawan-stack: ์ƒˆ ๊ณ„์ • ์•ฑ ๋„์ž…(oauth ์•ฑ ๋Œ€์ฒด)

์— ๋งŒ๋“  2019๋…„ 10์›” 04์ผ  ยท  32์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TheThingsNetwork/lorawan-stack

์š”์•ฝ

ํ˜„์žฌ OAuth ํ๋ฆ„, ๊ณ„์ • ์ „ํ™˜, ํ† ํฐ ๊ด€๋ฆฌ, ๊ฐ ๋ธŒ๋žœ๋”ฉ ๋“ฑ๊ณผ ๊ด€๋ จ๋œ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•  ์ƒˆ๋กœ์šด account ์•ฑ์—์„œ ๋ณด๋‹ค ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์‹œ๋„์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์šฐ๋ ค.

์™œ ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

  • ๊ณ„์ • ์ „ํ™˜ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค โŸถ #488
  • ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋ธŒ๋žœ๋“œ ๋ฐ ์ปจํ…์ŠคํŠธ ๋ˆ„๋ฝ โŸถ #730
  • ๋ˆ„๋ฝ๋œ ์„ธ์…˜ ๊ด€๋ฆฌ โŸถ #1217
  • OAuth ์ธ์ฆ ํ๋ฆ„์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ํ˜ผ๋ž€ โŸถ #265

์ด๋ฏธ ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ ๋ฌด์—‡์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  • UI๊ฐ€ ์ œํ•œ๋œ OAuth ์•ฑ

์—†์–ด์ง„ ๋ฌผ๊ฑด ์žˆ์–ด์š”? ๋ญ๋ฅผ๋ณด๊ณ  ์‹ถ์œผ์„ธ์š”?

๋ชจ๋“  ๊ณ„์ • ๋ฐ ์ธ์ฆ ๋ฌธ์ œ์— ๋Œ€ํ•ด OAuth ๊ณต๊ธ‰์ž ๋ฐ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ธŒ๋žœ๋“œ ๊ตฌ์„ฑ UI ์—ญํ• ์„ ํ•˜๋Š” ์•ฑ

ํ™˜๊ฒฝ

ํŽธ๋ฌผ

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

ํ˜„์žฌ ๊ตฌํ˜„์˜ ํฐ ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋ช…ํ™•์„ฑ๊ณผ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. OAuth ์•ฑ์„ ๋…๋ฆฝ๋œ ์ธ์ฆ ์ฃผ์ฒด๋กœ ์ธ์‹ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ธŒ๋žœ๋“œ์™€ ๋งฅ๋ฝ์˜ ๋ถ€์กฑ
  • ๋งค์šฐ ์ถ•์†Œ๋˜๊ณ  ์ •๋ณด๊ฐ€ ์—†๋Š” UI
  • ์ธ์ฆ ์ž์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋Š” ์ฝ˜์†”("{OAuth ๊ณต๊ธ‰์ž ์„œ๋น„์Šค ์ด๋ฆ„} ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ" ๋Œ€์‹  "๋กœ๊ทธ์ธ" ๋ฉ”์‹œ์ง€, ์Šน์ธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ)
    ๋ช…ํ™•์„ฑ์„ ๋†’์ด๋ ค๋ฉด ์•ฑ์„ ๋” ๋ˆˆ์— ์ž˜ ๋„๊ณ  ๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ชฉ์ ์— ๋งž๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋ธŒ๋žœ๋”ฉ ์ถ”๊ฐ€
  • ํ”Œ๋ ˆ์‹œ ์•„์›ƒ ๊ธฐ๋Šฅ

    • ๊ณ„์ • ์ „ํ™˜

    • ์„ธ์…˜ ๊ด€๋ฆฌ

    • ๊ถŒํ•œ ๊ด€๋ฆฌ

    • ํ”„๋กœํ•„ ์„ค์ •(๋น„๋ฐ€๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ, ํ”„๋กœํ•„ ์‚ฌ์ง„ ๋ณ€๊ฒฝ/์žŠ์Œ)

๊ณ„์ • ์•ฑ์„ ๊ตฌ์ƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„ธ ๊ฐœ์˜ ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์™€์ด์–ดํ”„๋ ˆ์ž„ ๋ณด๊ธฐ

account_login
account_overview
account_profile_settings
(์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ์‚ฌ์šฉ์ž ๋“œ๋กญ๋‹ค์šด์— ํ†ตํ•ฉ๋œ ๊ณ„์ • ์ „ํ™˜๊ธฐ์— ์ฃผ๋ชฉ)

์ด ์ž‘์—…์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ณ  Pull Request๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ. @johanstokking @htdvisser , ๊ณ„์†ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

identity server uweb umbrella

๋ชจ๋“  32 ๋Œ“๊ธ€

์ฝ˜์†”๊ณผ oauth ๊ณต๊ธ‰์ž ๊ฐ„์˜ ์ „์ฒด ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ํ˜ผ๋™ ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • TTS ๋กœ๊ณ  ๋Œ€์‹  ๊ณ„์ • ์•ฑ์— ๋ณ„๋„์˜ Account ๋กœ๊ณ ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ฝ˜์†”(cc @pierreph)์—๋„ ์‚ฌ์šฉํ•˜๋Š” ๋™์ผํ•œ ํ—ค๋” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ˜์†”๊ณผ ๊ณ„์ • ์•ฑ์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ๋ณ„๋„ ๋กœ๊ทธ์ธ ํ™”๋ฉด์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๊ฒฝํ—˜์„ ๋” ๊ฐ€๊น๊ฒŒ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์ฝ˜์†” ๋กœ๊ทธ์ธ ํ™”๋ฉด์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค /console/login

    • ์ฝ˜์†”์€ (์œ ํšจํ•œ) ์•ก์„ธ์Šค ํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ ๊ณ„์ • ์•ฑ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ /account/login ์ž๋™ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.

    • ์ฝ˜์†” ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์—์„œ ์ด๋ฏธ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋กœ๊ทธ์ธ ์„ฑ๊ณต ํ›„ ์‚ฌ์šฉ์ž๋ฅผ ์ฝ˜์†”๋กœ ๋‹ค์‹œ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ๋ฆฌ๋””๋ ‰์…˜ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • ์ฝ˜์†” UI์—์„œ ๋กœ๊ทธ์•„์›ƒํ•˜๋ฉด ์ €์žฅ๋œ ์•ก์„ธ์Šค ํ† ํฐ์ด ์ œ๊ฑฐ๋˜๊ณ  ๊ณ„์ • ์•ฑ์—์„œ๋„ ๋กœ๊ทธ์•„์›ƒ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์ฝ˜์†”์— ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ž๊ฒฉ ์ฆ๋ช…์„ ๋‹ค์‹œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



      • ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ์—์„œ ๋กœ๊ทธ์•„์›ƒ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์ฝ˜์†”๊ณผ ๊ณ„์ • ์•ฑ์ด ๋™์ผํ•œ ์ถœ์ฒ˜์— ์žˆ๋‹ค๊ณ  ๋ณด์žฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—)


      • v2์—์„œ๋Š” ์–ด๋””์„œ๋‚˜ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๊ทธ์•„์›ƒ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฐ„๋‹จํ•œ /users/logout ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


      • CSRF๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ ๋™์ผํ•œ ๊ฒƒ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.



    • ์ƒˆ๋กœ์šด ํ๋ฆ„์€ v2 ์ฝ˜์†”์˜ ํ๋ฆ„๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ UX๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜์†” ํด๋ผ์ด์–ธํŠธ์™€ ์ธ์ฆ ์„œ๋ฒ„์˜ ๋ถ„๋ฆฌ๋ฅผ ํฌ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ˜์†”์€ ์ผ์ข…์˜ ํŠน์ˆ˜ ์ผ€์ด์Šค ํด๋ผ์ด์–ธํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

    • ์•ž์œผ๋กœ ๋‹ค๋ฅธ ๋กœ๊ทธ์ธ ์ ˆ์ฐจ ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋ฉด ์ด ํ๋ฆ„์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ณ„ํš์— ๋Œ€ํ•œ ๋ถˆ๋งŒ ์‚ฌํ•ญ์ด ์—†์œผ๋ฉด ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ›Œ๋ฅญํ•œ ๊ณ„ํš์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ฝ˜์†”์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋กœ๊ทธ์•„์›ƒํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  UX์—์„œ OAuth๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐจ ์ถœ์ฒ˜ ๋กœ๊ทธ์•„์›ƒ์— ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ๊ฐ„๋‹จํ•œ 2๋‹จ๊ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์•„๋‹๊นŒ์š”? "ํŽ˜์ด์ง€"๋ฅผ ๋กœ๊ทธ์•„์›ƒํ•˜์—ฌ ์ฝ˜์†” ์ €์žฅ ์•ก์„ธ์Šค ํ† ํฐ์„ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ๊ณ„์ • ์•ฑ์ด ๋กœ๊ทธ์•„์›ƒํ•˜๋Š” ์ผ๋ฐ˜ ๋กœ๊ทธ์•„์›ƒ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฆฌ๋””๋ ‰์…˜ ์—†์ด ์ด๊ฒƒ์„ ๋กœ๊ทธ์•„์›ƒ ๋์ ์— ๊ฒŒ์‹œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋กœ๊ทธ์•„์›ƒ์˜ ๊ฒฝ์šฐ OpenID Connect ๋กœ๊ทธ์•„์›ƒ์—์„œ ์˜๊ฐ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ‹์ง„ ์š”์•ฝ์€ ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://medium.com/@robert.broeckelmann/openid -connect-logout-eccc73df758f

ํ›Œ๋ฅญํ•œ ๊ณ„ํš์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ฝ˜์†”์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋กœ๊ทธ์•„์›ƒํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  UX์—์„œ OAuth๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐจ ์ถœ์ฒ˜ ๋กœ๊ทธ์•„์›ƒ์— ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ๊ฐ„๋‹จํ•œ 2๋‹จ๊ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์•„๋‹๊นŒ์š”? "ํŽ˜์ด์ง€"๋ฅผ ๋กœ๊ทธ์•„์›ƒํ•˜์—ฌ ์ฝ˜์†” ์ €์žฅ ์•ก์„ธ์Šค ํ† ํฐ์„ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ๊ณ„์ • ์•ฑ์ด ๋กœ๊ทธ์•„์›ƒํ•˜๋Š” ์ผ๋ฐ˜ ๋กœ๊ทธ์•„์›ƒ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฆฌ๋””๋ ‰์…˜ ์—†์ด ์ด๊ฒƒ์„ ๋กœ๊ทธ์•„์›ƒ ๋์ ์— ๊ฒŒ์‹œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

2๋‹จ๊ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋‚ด ์šฐ๋ ค๋Š” ๊ณ„์ • ์•ฑ์˜ ๋กœ๊ทธ์•„์›ƒ์ด CSRF๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋กœ๊ทธ์•„์›ƒ ๋งํฌ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ์ž์‹ ์˜ ๊ณ„์ •์—์„œ ๋กœ๊ทธ์•„์›ƒํ•˜๋„๋ก ์œ ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜„์žฌ v2 ์Šคํƒ์—์„œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค( ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋กœ๊ทธ์•„์›ƒ๋จ ).
ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๊ฒƒ์ด ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ƒˆ ๊ณ„์ • ์•ฑ์— ๋Œ€ํ•ด ๊ฝค ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ฝ˜์†” ๋ฐ ๊ณ„์ • ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํŒฉํ„ฐ๋ง๋œ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์ปจํ…Œ์ด๋„ˆ
  • ์ƒˆ๋กœ์šด ๋””์ž์ธ ๊ตฌํ˜„(์‘๋‹ต์„ฑ ํฌํ•จ)
  • ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ํฌํ•จํ•œ ํ”„๋กœํ•„ ์„ค์ • ๊ตฌํ˜„
  • ๊ตฌํ˜„๋œ ๊ถŒํ•œ ๊ด€๋ฆฌ(๋ณด๊ธฐ ๋ฐ ์ทจ์†Œ)
  • ์„ธ์…˜ ๊ด€๋ฆฌ ๊ตฌํ˜„(๋ณด๊ธฐ ๋ฐ ์ทจ์†Œ)
  • ๊ณต์œ  CSS ๋ชจ๋“ˆ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋นˆ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

์Šคํƒ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ก์„ธ์Šค ํ† ํฐ์„ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์ • ์•ฑ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์ ์ ˆํ•œ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ "oauth ์•ฑ"์€ oauth ์„œ๋ฒ„์˜ ์ธ์ฆ ์—”๋“œํฌ์ธํŠธ(๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๋ฐ ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ธฐํƒ€ ๊ณ„์ • ๊ด€๋ จ ์—”๋“œํฌ์ธํŠธ)์— ์—ฐ๊ฒฐํ•˜๋Š” SPA์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
@htdvisser ๋Š” ์ดˆ๊ธฐ ์•„์ด๋””์–ด๊ฐ€ ์•”ํ˜ธ ๋ถ€์—ฌ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ • ์•ฑ์„ ๋ณ„๋„์˜ oauth ํด๋ผ์ด์–ธํŠธ๋กœ ๊ฐ–๋Š”

  • ์†Œ์Šค์— ๋”ฐ๋ผ ์•”ํ˜ธ ๋ถ€์—ฌ ์œ ํ˜•์€ "๊ณต์‹" ๋ฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๊ฒฝ์šฐ์—๋„ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(oauth ๊ณต๊ธ‰์ž์˜ ๋กœ๊ทธ์ธ ํ™”๋ฉด ์˜†)
  • ์ด๋ฏธ oauth ์•ฑ ๋‚ด์—์„œ ์ธ์ฆ์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  oauth ๊ณต๊ธ‰์ž๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ„์ • ์•ฑ์— ์•”ํ˜ธ ๋ถ€์—ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ˜์†”์—๋„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๋ฏธ @htdvisser ์—๊ฒŒ ์ด๊ฒƒ์˜ ์ „์ฒด ์œ„์ž„๋œ ์ธ์ฆ/๊ถŒํ•œ ๋ถ€์—ฌ ์ธก๋ฉด์ด ๋‚˜์—๊ฒŒ ๋‹ค์†Œ ์••๋„์ ์ด๋ฉฐ ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ฑ…์ž„์„ ์งˆ ๋งŒํผ ์ง€์‹์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ ๊ณ„์ • ์•ฑ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋„์›€๊ณผ ์˜๊ฒฌ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์†Œ์Šค์— ๋”ฐ๋ผ ์•”ํ˜ธ ๋ถ€์—ฌ ์œ ํ˜•์€ "๊ณต์‹" ๋ฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๊ฒฝ์šฐ์—๋„ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์•”ํ˜ธ ๋ถ€์—ฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์‚ฌ์–‘ ๋ฐ ์ถ”๋ก ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://tools.ietf.org/html/draft-ietf-oauth-security-topics-13#section -3.4

ํ˜„์žฌ #2148์— ์˜ํ•ด ์ฐจ๋‹จ๋จ

๊ทธ๋ž˜์„œ ํ•œ๋™์•ˆ ์ด๊ฒƒ์— ๊ด€์—ฌํ•œ ํ›„์— ์•ฝ๊ฐ„์˜ ์˜๊ฒฌ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์ • ์•ฑ์˜ ์›๋ž˜ ์•„์ด๋””์–ด๋Š” ํ˜„์žฌ oauth ์•ฑ์„ ๋Œ€์ฒดํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ํ”„๋กœํ•„ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค(OP ์ฐธ์กฐ). ์ด๊ฒƒ์˜ ๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์— ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ„์ • ์•ฑ์ด OAuth ๊ณต๊ธ‰์ž์ด์ž ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์•„์ด๋””์–ด๋Š” ์ƒˆ๋กœ์šด OAuth ํด๋ผ์ด์–ธํŠธ( account )๋ฅผ ๋„์ž…ํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋Šฅ์„ ํ˜„์žฌ OAuth ์•ฑ๊ณผ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ OAuth ์ œ๊ณต์ž(๋กœ๊ทธ์ธ, ๋“ฑ๋ก, ๊ณ„์ • ํ™•์ธ ๋“ฑ)์™€ ๊ณ„์ • ์•ฑ ํด๋ผ์ด์–ธํŠธ(ํ”„๋กœํ•„ ์„ค์ •, ์„ธ์…˜ ๊ด€๋ฆฌ, ๊ถŒํ•œ ๊ด€๋ฆฌ)๊ฐ€ ํ•˜๋‚˜์˜ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋Š” OAuth ๊ณต๊ธ‰์ž์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๊ธฐ์ˆ ์ ์ธ ๋ถ„๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ ๊ณ„์ • ํด๋ผ์ด์–ธํŠธ๋Š” oauth ํŒจํ‚ค์ง€์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ๋™์ผํ•œ ์ง„์ž…์ ( account.js )์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐ€์ง€๋ฅผ ๋™์ผํ•œ ์•ฑ์œผ๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ผ์šฐํŒ…์€ ์ด ํ˜ผํ•ฉ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

  • /account/login oauth ๋กœ๊ทธ์ธ [OAuth ์ œ๊ณต์ž ๊ณ„์ธต]
  • ์‚ฌ์šฉ์ž ๋“ฑ๋ก์„ ์œ„ํ•œ /account/register [OAuth ์ œ๊ณต์ž ๊ณ„์ธต]
  • /account/forgot-password ์‚ฌ์šฉ์ž ๋“ฑ๋ก [OAuth ์ œ๊ณต์ž ๊ณ„์ธต]
  • /account/client/login/ttn-stack ํด๋ผ์ด์–ธํŠธ ๋กœ๊ทธ์ธ(๊ถŒํ•œ ๋ถ€์—ฌ) [OAuth ํด๋ผ์ด์–ธํŠธ ๊ณ„์ธต]
  • /account/client/oauth/callback ์ธ์ฆ ์ฝ”๋“œ ๊ตํ™˜ [OAuth ํด๋ผ์ด์–ธํŠธ ๊ณ„์ธต]
  • /account oauth ํด๋ผ์ด์–ธํŠธ [OAuth ํด๋ผ์ด์–ธํŠธ ๊ณ„์ธต] ๊ฐœ์š” ํŽ˜์ด์ง€

๋˜๋Š” OAuth ๊ณต๊ธ‰์ž( /oauth via pkg/oauth )๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๊ณ„์ • ์•ฑ( /account via pkg/account )์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋‘ ๋ฌธ์ œ๋ฅผ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ) ์ฝ˜์†”์—์„œ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด OAuth ๊ณต๊ธ‰์ž๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์‚ฌ์šฉ์ž ๊ณ„์ • ๋“ฑ๋ก์„ ํฌํ•จํ•œ ์ธ์ฆ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฑ…์ž„์„ ์ง€๊ฒŒ ๋˜์ง€๋งŒ ํ˜„์žฌ์™€ ๊ฐ™์ด ์ž์ฒด์ ์œผ๋กœ ์ธ์ฆ๋œ ๋ณด๊ธฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋กœ๊ทธ์ธ ํ›„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณ„์ • ์•ฑ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋˜๋ฉฐ, ๊ทธ๋Ÿฌ๋ฉด ์ž๋™์œผ๋กœ ํ† ํฐ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์ด ํ˜„์žฌ ์ธ์ฆ ๋ฐ ๊ณ„์ • ๊ด€๋ฆฌ์™€ ๊ด€๋ จ๋œ ํ˜ผ๋ž€์„ ์–ด๋Š ์ •๋„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์€ ๋” ๊นจ๋—ํ•ด ๋ณด์ด์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋ถ„๋ฆฌ๋ฅผ ์ „๋‹ฌ/๋ธŒ๋žœ๋“œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘˜ ๋‹ค "๊ณ„์ • ์•ฑ"์œผ๋กœ ๊ณ„์† ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด The Things Stack Single Sign On ๋ฐ The Things Stack Account Application ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜๊ฒฌ์„ ์•Œ๋ ค์ฃผ์„ธ์š”.

ํ , ํ•œ๋ฐœ ๋ฌผ๋Ÿฌ์„œ์„œ ๊ณ„์ • ์•ฑ์„ OAuth ํด๋ผ์ด์–ธํŠธ๋กœ ๋งŒ๋“  ๋ชฉ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? OAuth๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š”๊ฐ€?

  • ํ”„๋กœํ•„ ์„ค์ •(์ด๋ฆ„, ์ด๋ฉ”์ผ, ํ”„๋กœํ•„ ์‚ฌ์ง„)
  • ์„ธ์…˜ ๊ด€๋ฆฌ(๊ฒ€ํ† , ์ฒ ํšŒ)
  • ๊ถŒํ•œ ๊ด€๋ฆฌ(๊ฒ€ํ† , ์ฒ ํšŒ)
  • (ํ–ฅํ›„ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค๋ฅธ TTES ๊ด€๋ จ ๋ฉ”ํƒ€ ์„ค์ •)

์ด๋“ค ๋ชจ๋‘๋Š” ๊ฐ๊ฐ์˜ RPC๋ฅผ ์ธ์ฆํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "Things Network Community"์™€ ๊ฐ™์ด ์™ธ๋ถ€์— ์žˆ์„ ์ˆ˜ ์žˆ๋Š” OAuth ๊ณต๊ธ‰์ž์™€ @kschiffer ํฌ์ธํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ Things Stack์— ์ €์žฅ๋œ ์‚ฌ์šฉ์ž ์—”ํ„ฐํ‹ฐ์˜ ํ•„๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋ฅผ

์šฐ๋ฆฌ์˜ /api/v3/* ์—”๋“œํฌ์ธํŠธ๋Š” CORS๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค ์ธ์ฆ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. API ํ‚ค ๋ฐ ์•ก์„ธ์Šค ํ† ํฐ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœํ•„ ์„ค์ •(์ด๋ฆ„, ์ด๋ฉ”์ผ, ํ”„๋กœํ•„ ์‚ฌ์ง„)
  • ์„ธ์…˜ ๊ด€๋ฆฌ(๊ฒ€ํ† , ์ฒ ํšŒ)
  • ๊ถŒํ•œ ๊ด€๋ฆฌ(๊ฒ€ํ† , ์ฒ ํšŒ)
  • (ํ–ฅํ›„ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค๋ฅธ TTES ๊ด€๋ จ ๋ฉ”ํƒ€ ์„ค์ •)

์ด๋“ค ๋ชจ๋‘๋Š” ๊ฐ๊ฐ์˜ RPC๋ฅผ ์ธ์ฆํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์ฝ˜์†”์˜ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ˜์†”์ด ์–ด๋Š ์ •๋„ ํ™•์žฅ๋œ ์šฐ๋ ค๋ฅผ ํ˜ผํ•ฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์ฝ˜์†” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ๊ณ„์ • ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์ƒํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์•„๋งˆ๋„ ์ด๊ฒƒ์ด ์ œ๊ฐ€ ๐Ÿคทโ€โ™‚๏ธ์„ ๊ณผ๋„ํ•˜๊ฒŒ ์—”์ง€๋‹ˆ์–ด๋งํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๋Š” ์ฝ˜์†”์„ ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ๋กœ๋งŒ ๋ณด๊ณ  ์‹ถ์€์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  TTS ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฒ”์šฉ ๊ด€๋ฆฌ ํ”Œ๋žซํผ์œผ๋กœ ์—ด๊ฑฐ๋‚˜ ๋” ์›์ž์ ์ด๋ฉฐ ๋ถ„๋ฆฌ๋ฅผ ๊ณ ์ˆ˜ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์•ฑ/ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „๋žต์  ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‘˜ ๋‹ค์˜ ๊ฒฝ์šฐ๋ฅผ ๋ณธ๋‹ค.

์ฝ˜์†”(๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ์ฝ˜์†”์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ฝ˜์†”)์ด ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šน์ธ๋œ OAuth ํด๋ผ์ด์–ธํŠธ, ์„ธ์…˜, ๊ธฐ๋ณธ ์ด๋ฉ”์ผ ์ฃผ์†Œ, ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ฝ˜์†”์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ „์šฉ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์•ฑ(๊ณ„์ • ์•ฑ)์ด ์žˆ์œผ๋ฉด ํ›จ์”ฌ ์ข‹์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ดˆ๊ธฐ ์งˆ๋ฌธ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

๋‚ด ์˜๊ฒฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ˜ผํ•ฉ ์ ‘๊ทผ:

  • ์‚ฌ์šฉ์ž POV์—์„œ ๋œ ํ˜ผ๋ž€(๋ชจ๋“  ๊ณ„์ • ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•œ ์œ„์น˜)
  • ๋” ์‰ฌ์šด ๋ธŒ๋žœ๋”ฉ/์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜
  • ๊ณ„์ • ์•ฑ์˜ ์›๋ž˜ ๊ณ„ํš์— ๋ถ€ํ•ฉ
  • ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ์ƒˆ๋กœ์šด ์ง„์ž…์ ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ„๋„์˜ ์ƒ์šฉ๊ตฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„์ด ๋” ๋ณต์žกํ•ด์ง/ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์ง(๊ณ„์ • ์•ฑ์ด ์ธ์ฆ ๊ณต๊ธ‰์ž ๋ฐ ํด๋ผ์ด์–ธํŠธ์ž„)

๋ถ„๋ฆฌ๋œ ์ ‘๊ทผ:

  • ๋ณด๋‹ค ๊นจ๋—ํ•˜๊ณ  ์ „ํ†ต์ ์ธ ๊ตฌํ˜„
  • ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ณ  ๋ช…ํ™•ํ•œ ๊ตฌ์„ฑ
  • ํ•ฉ๋ฆฌ์ ์ธ ๋ธŒ๋žœ๋”ฉ๊ณผ ์†Œํ†ต์ด ํ•„์š”ํ•œ oauth ์•ฑ ์˜†์— ์ƒˆ๋กœ์šด ์•ฑ ๋„์ž…
  • ๋” ๊ธด ๋นŒ๋“œ(๋ฏธ๋ฏธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์Œ) ๋ฐ ๋” ๋งŽ์€ ์ž์‚ฐ

๋‚˜๋Š” ํ˜ผํ•ฉ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœํ•„ ์„ค์ •(์ด๋ฆ„, ์ด๋ฉ”์ผ, ํ”„๋กœํ•„ ์‚ฌ์ง„)
  • ์„ธ์…˜ ๊ด€๋ฆฌ(๊ฒ€ํ† , ์ฒ ํšŒ)
  • ๊ถŒํ•œ ๊ด€๋ฆฌ(๊ฒ€ํ† , ์ฒ ํšŒ)
  • (ํ–ฅํ›„ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค๋ฅธ TTES ๊ด€๋ จ ๋ฉ”ํƒ€ ์„ค์ •)

๊ณ„์ •์•ฑ ๋งž์ฃ ? OAuth๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?

  • ํ•ฉ๋ฆฌ์ ์ธ ๋ธŒ๋žœ๋”ฉ๊ณผ ์†Œํ†ต์ด ํ•„์š”ํ•œ oauth ์•ฑ ์˜†์— ์ƒˆ๋กœ์šด ์•ฑ ๋„์ž…

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ์ „ํžˆ OAuth ์•ฑ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ž ์žฌ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๊ณ„์ • ์•ฑ์—์„œ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์—†๋Š” OAuth ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ณ„์ • ์•ฑ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ณ„์ •์•ฑ ๋งž์ฃ ? OAuth๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?

์˜ˆ, ์ด๊ฒƒ์€ ๊ณ„์ • ์•ฑ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณ„ํš์€ ํ˜„์žฌ OAuth ์•ฑ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๊ณ„์ • ์•ฑ์˜ ์ผ๋ถ€๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ์ „ํžˆ OAuth ์•ฑ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ธ์ฆ(OAuth ํ๋ฆ„์˜ ์ผ๋ถ€๋กœ), ์‚ฌ์šฉ์ž ๋“ฑ๋ก, ํด๋ผ์ด์–ธํŠธ ๊ถŒํ•œ ๋ถ€์—ฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์„ ์œ„ํ•ด. ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ํด๋ผ์ด์–ธํŠธ ๊ถŒํ•œ ๋ถ€์—ฌ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ.

์ž ์žฌ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๊ณ„์ • ์•ฑ์—์„œ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์—†๋Š” OAuth ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ณ„์ • ์•ฑ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์ • ์•ฑ์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ํ˜„์žฌ OAuth ์•ฑ์„ ๋‹จ์ˆœํžˆ ํ™•์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ญ๊ณ ๊ธฐ์™€ ๊ณ„๋ž€์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ณ„์ • ์•ฑ ๊ธฐ๋Šฅ(์„ธ์…˜, ๊ถŒํ•œ ๋ถ€์—ฌ ๋“ฑ)์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ธ์ฆ ์ˆ˜๋‹จ์ด ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: OAuth ์•ฑ์— ์žˆ๋Š” ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด) ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๋ณผ ๋•Œ ์ด๊ฒƒ์€ ์‹คํ˜„ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

OAuth ์•ฑ์€ ๋…๋ฆฝ ์‹คํ–‰ํ˜•์ธ๊ฐ€์š”? OAuth ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ๋ฆฌ๋””๋ ‰์…˜ ํ๋ฆ„์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด OAuth ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์ž…๋‹ˆ๊นŒ?


๊ฐ•์กฐ ๊ด‘์‚ฐ:

๋‚ด ์•„์ด๋””์–ด๋Š” ์ƒˆ๋กœ์šด OAuth ํด๋ผ์ด์–ธํŠธ ( account )์™€ ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์—ฌ ํ˜„์žฌ OAuth ์•ฑ ๊ณผ ๊ธฐ๋Šฅ์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ OAuth ์ œ๊ณต์ž (๋กœ๊ทธ์ธ, ๋“ฑ๋ก, ๊ณ„์ • ํ™•์ธ ๋“ฑ)์™€ ๊ณ„์ • ์•ฑ ํด๋ผ์ด์–ธํŠธ (ํ”„๋กœํ•„ ์„ค์ •, ์„ธ์…˜ ๊ด€๋ฆฌ, ๊ถŒํ•œ ๊ด€๋ฆฌ)๊ฐ€ ํ•˜๋‚˜์˜ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋Š” OAuth ๊ณต๊ธ‰์ž ์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๊ธฐ์ˆ ์ ์ธ ๋ถ„๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์—์„œ ๊ณ„์ • ํด๋ผ์ด์–ธํŠธ ๋Š” oauth ํŒจํ‚ค์ง€ ์˜ ์ผ๋ถ€๊ฐ€

๋‚˜๋Š” ์—ฌ๊ธฐ๋ฅผ ๋ณธ๋‹ค;

  • OAuth ํด๋ผ์ด์–ธํŠธ
  • ํ˜„์žฌ OAuth ์•ฑ
  • OAuth ์ œ๊ณต์ž
  • ๊ณ„์ • ์•ฑ ํด๋ผ์ด์–ธํŠธ
  • OAuth ์ œ๊ณต์ž
  • ํด๋ผ์ด์–ธํŠธ
  • ๋ฐฑ์—”๋“œ
  • ๊ณ„์ • ํด๋ผ์ด์–ธํŠธ
  • oauth ํŒจํ‚ค์ง€

๋‚˜๋Š” ์ œ์•ˆ์„ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌด์—‡์ธ์ง€ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  1. ๊ณ„์ • ๋งŒ๋“ค๊ธฐ
  2. ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ„์‹ค
  3. ๋กœ๊ทธ์ธ
  4. ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
  5. ํ”„๋กœํ•„ ๋ณด๊ธฐ ๋ฐ ์ˆ˜์ •
  6. ์„ธ์…˜ ๊ด€๋ฆฌ
  7. OAuth ๋ฌผ๊ฑด

    1. ๋™์˜ ํ™”๋ฉด(OAuth ์ธ์ฆ ์ฝ”๋“œ ํ๋ฆ„)

    2. OAuth ์Šน์ธ ๊ด€๋ฆฌ

์„ธ์…˜ ์ธ์ฆ์œผ๋กœ ๊ฐ€๋ฉด OAuth๋ฅผ ์ „ํ˜€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  1-6์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•˜์ง€, ๊ทธ๋ ‡์ง€?

๋„ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋งŽ์€ ๊ฒƒ์„ ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ณ ์ •๋˜์ง€ ์•Š์€ ์šฉ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋ฌธ์ œ์˜ ๋ณต์žก์„ฑ์— ๋Œ€ํ•œ ์ข‹์€ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜….

ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

OAuth ์ œ๊ณต์ž
OAuth 2.0 ์‚ฌ์–‘์— ๋”ฐ๋ผ ๊ถŒํ•œ ๋ถ€์—ฌ(์ด ๊ฒฝ์šฐ ์ธ์ฆ๋„ ์ œ๊ณต)๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ pkg/oauth ํŒจํ‚ค์ง€๋กœ, OAuth ์•ฑ(์•„๋ž˜ ์ฐธ์กฐ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •๋ณด(๋ Œ๋” ๋กœ๊ทธ์ธ, ๋“ฑ๋ก, ์Šน์ธ ๋ณด๊ธฐ ๋“ฑ)๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

OAuth ์•ฑ
์ด๊ฒƒ์€ ํ”„๋ก ํŠธ์—”๋“œ์˜ ๋ฐ˜์‘ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ๋Š” ๋ฐ˜์‘ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ๊ฐ™์€ ๊ณตํ†ต ๋ถ€๋ถ„์„ ๊ณต์œ ํ•˜๋Š” ๋‹ค๋ฅธ ์•ฑ(๋‹ค๋ฅธ ์ง„์ž…์  oauth.js / console.js )์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

OAuth ํด๋ผ์ด์–ธํŠธ
์ฝ˜์†” ๋˜๋Š” CLI์™€ ๊ฐ™์ด ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ๋ก๋œ ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.

์ธ์ฆ ํŒจํ‚ค์ง€
OAuth ๊ณต๊ธ‰์ž ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” Go ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. pkg/oauth ์ž…๋‹ˆ๋‹ค.

๋ณด์‹œ๋‹ค์‹œํ”ผ ์—ฌ๊ธฐ์—๋Š” 3~4๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ์Šน์ธ์„ ํ•˜๋Š” ๋ฐฉ์‹์„ ์œ ์ง€ํ•œ๋‹ค๋ฉด ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ชจ๋“  ์—ญํ• ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ธ์…˜ ์ธ์ฆ์œผ๋กœ ๊ฐ€๋ฉด OAuth๋ฅผ ์ „ํ˜€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  1-6์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•˜์ง€, ๊ทธ๋ ‡์ง€?

์˜ˆ. 1-4๋Š” ์ด๋ฏธ oauth / ์•ก์„ธ์Šค ํ† ํฐ ์—†์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 5์™€ 6์€ ํ˜„์žฌ ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 7. ii๋Š” ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ํ† ํฐ ์—†์ด 5์™€ 6์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์‹ค์ œ๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ oauth ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๋Š” ๋ฏธ๋ž˜์— ๊ณ„์ • ์•ฑ์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์•ก์„ธ์Šค ํ† ํฐ์„ ์œ ์ผํ•œ ์Šน์ธ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ํ† ํฐ ์—†์ด 5์™€ 6์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์‹ค์ œ๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ oauth ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๋Š” ๋ฏธ๋ž˜์— ๊ณ„์ • ์•ฑ์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์•ก์„ธ์Šค ํ† ํฐ์„ ์œ ์ผํ•œ ์Šน์ธ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ. ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•œ ํ›„ ๊ณ„์ • ์•ฑ์—์„œ _only_ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” "sudo ๋ชจ๋“œ"๋ฅผ ์œ„ํ•œ ๋” ๋‚˜์€ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ, OAuth ํด๋ผ์ด์–ธํŠธ์™€ ๊ณ„์ • ์•ฑ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ ์‚ฌ์ด์— ์•ฝ๊ฐ„์˜ ๊ฒน์นจ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ๊ฒน์นจ์€ ํฌ๊ฒŒ ๋Š๊ปด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ„์ • ์•ฑ ์ „์šฉ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
@htdvisser ์ด์˜๊ฐ€ ์žˆ์œผ์‹ ๊ฐ€์š”? ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด ๊ด€๋ จ ํŒŒ์ผ/ํŒจํ‚ค์ง€๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์™œ๋ƒํ•˜๋ฉด ๊ณง ์ด ์ž‘์—…์„ ํ•  ์‹œ๊ฐ„์ด ์—†์„ ๊ฒƒ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(?).

์ด์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด /api/v3/* ์—”๋“œํฌ์ธํŠธ๋Š” CORS๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค ์ธ์ฆ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฟ ํ‚ค ์ธ์ฆ ์ˆ˜๋ฝ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด CORS ํ—ค๋”๋ฅผ ์ž˜ ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ๋์ ์— ๋Œ€ํ•ด ์ฟ ํ‚ค ์ธ์ฆ ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ์„ ํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง๋กœ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


API๋Š” ๋ชจ๋‘ gRPC์ด๋ฉฐ ์ธ์ฆ์€ ์š”์ฒญ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ gRPC์— ์ „ํŒŒ๋˜๋Š” Authorization ํ—ค๋”๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ์ธ์ฆ ๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • pkg/auth/auth.go SessionToken ์œ ํ˜• ์ถ”๊ฐ€
  • API ํ‚ค ๋ฐ ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ Session ๋ชจ๋ธ์— ๋น„๋ฐ€ ๋ถ€๋ถ„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟ ํ‚ค์—์„œ ์„ธ์…˜ ID์™€ ์„ธ์…˜ ๋น„๋ฐ€์„ ์ถ”์ถœํ•˜๊ณ  Authorization ํ—ค๋”์— SessionToken์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ SessionToken ๋กœ case ๋กœ switch tokenType { ์—์„œ pkg/identityserver/entity_access.go

์—ฌ๊ธฐ์„œ ๊ณ ๋ คํ•ด์•ผ ํ•  ํ•œ ๊ฐ€์ง€๋Š” ๊ณ„์ • ์•ฑ๊ณผ v3 API๊ฐ€ ๋™์ผํ•œ ์ถœ์ฒ˜์—์„œ ์ œ๊ณต๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ธ์ฆ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ์ฟ ํ‚ค ์ธ์ฆ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์‹ค์ œ๋กœ๋Š” ๋ฐฐํฌ์—์„œ ๋™์ผํ•œ ์ถœ์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ, ๋™์ผํ•œ ์ถœ์ฒ˜์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@kschiffer ์—ฌ๊ธฐ์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ฐจ๋‹จ ํ•ด์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ์— ์š”์•ฝ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค: https://github.com/TheThingsNetwork/lorawan-stack/pull/2850#issuecomment -657497193

์ข‹์•„, ์—ฌ๊ธฐ์„œ ๋Œ€ํ™”๋ฅผ ๊ณ„์†ํ•˜์ž.

@kschiffer ์ž ์‹œ ์ž‘์—…ํ•œ ํ›„:

  • oauth ์•ฑ์˜ ํ”„๋ก ํŠธ์—”๋“œ ๋ถ€๋ถ„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ์ฆ ํ™”๋ฉด์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋„ค

  • ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์œ„ํ•ด is.oauth.ui.* ๊ตฌ์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์„ฑ๊ฐ€์‹  ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
    [...]
  • ๋‚˜๋Š” ๋˜ํ•œ CC๋ฅผ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ์Šคํƒ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์ œํ•œ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ํ™•์‹ ์ด ์„œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ์•ฝ๊ฐ„ ์šด์ด ์—†์œผ๋ฉฐ ์‹ค์ œ๋กœ ์•ฝ๊ฐ„์˜ ์ž…๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

V3์—์„œ ๊ตฌ์„ฑ์„ ์ค‘๋‹จํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ƒˆ ๊ตฌ์„ฑ์„ ๋„์ž…ํ•˜๊ณ  ์ด์ „ ๊ตฌ์„ฑ์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด์ „ ๊ตฌ์„ฑ์„ ๋Œ€์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ณ  bump/major ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ TODO ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์—ฌ ์ด์ „ ๊ตฌ์„ฑ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ œ ์ œ์•ˆ์€ ์™„์ „ํžˆ ๋Œ€์ฒด๋˜๊ณ  ์ƒˆ ๊ณ„์ • ์•ฑ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์ƒˆ ๊ตฌ์„ฑ์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ •์ƒ์ ์ธ ๊ธฐ๋ณธ๊ฐ’๊ณผ is.oauth.ui.* ๋ฅผ ํ†ตํ•œ ์ด์ „ ๊ตฌ์„ฑ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

@kschiffer ์—ฌ๊ธฐ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ˜„์žฌ ์—ฌ๊ธฐ์—์„œ ์ง„ํ–‰ ์ค‘์ธ ์ƒˆ ๋น„๊ณ„์— ๋Œ€ํ•œ ๋‚ด ์ž‘์—…์„ ๋‹ค์‹œ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. #3453

๋‹ค์Œ์€ ์ธ์ฆ๋œ ๋ทฐ๋ฅผ ๋ฆฌ๋ฒ ์ด์Šค, ์ˆ˜์ • ๋ฐ PR๋งํ•˜๊ณ  ํ˜„์žฌ ๋””์ž์ธ์„ ์ƒˆ ๋ธŒ๋žœ๋”ฉ์œผ๋กœ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@kschiffer ์—ฌ๊ธฐ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ณ„์ • ์•ฑ์€ 3.11์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์•„์ง ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ณ„์ • ์ „ํ™˜ #488
  • ์„ธ์…˜ ๊ด€๋ฆฌ
  • ๊ถŒํ•œ ๋ถ€์—ฌ ๊ด€๋ฆฌ(iirc ์—ฌ๊ธฐ์—๋Š” API ๋์  ์ถ”๊ฐ€๋„ ํฌํ•จ๋จ)

ํ™•์ธ. https://github.com/TheThingsNetwork/lorawan-stack/issues/488 ์ด ์ด๋ฏธ ๋‹ซํžŒ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์œ„์— ๋Œ€ํ•œ ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์—ฌ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰