Oauthlib: OAuth2 ์„œ๋ฒ„ - JWT ํ† ํฐ ์ง€์›

์— ๋งŒ๋“  2012๋…„ 07์›” 21์ผ  ยท  21์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: oauthlib/oauthlib

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์šฐ๋ฆฌ๋Š” ํ™•์‹คํžˆ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์œ ์šฉํ• ๊นŒ์š”?

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

์•„์ง ์ž‘์—… ์ค‘์ธ๊ฐ€์š”?

@bigblind ์ตœ๊ทผ์— ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฌธ์ œ๋Š” JWT ํ† ํฐ RFC๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@thedrow ์ด๊ฒƒ์ด ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? RTD๋Š” ๋‹จ์ˆœํžˆ ์—ฌ๊ธฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์†Œ์Šค ์ฝ”๋“œ์˜ ์•„๋ฌด ๊ฒƒ๋„ ์ €์—๊ฒŒ ํŠ€์–ด๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ‘œ์ค€์ด ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๋ฌธ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์‹ค์ˆ˜ํ•˜์ง€ ์•Š๋Š” ํ•œ ํ‘œ์ค€์ด ์™„์„ฑ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://tools.ietf.org/html/rfc7523

์ด์ œ ์ œ์•ˆ๋œ ํ‘œ์ค€์œผ๋กœ ํ™•์ • ์ค‘์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ํ•œ ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ ์•ˆ์— ๋งˆ๋ฌด๋ฆฌ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž์› ๋ด‰์‚ฌ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@thedrow ์•ˆ๋…•ํ•˜์„ธ์š”, jwt ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” django ๊ณต๊ธ‰์ž๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@Antherkiv ํ˜„์žฌ ๊ตฌํ˜„์€ ์‚ฌ์–‘์˜ 4๋ฒˆ์งธ ์ดˆ์•ˆ์—
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” Django ๊ณต๊ธ‰์ž๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ํ˜ผ๋ž€์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ์‚ฌ๋žŒ๋“ค์ด _server_๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ๋‹ค๊ณ  ๋ฏฟ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํด๋ผ์ด์–ธํŠธ๋งŒ ๋ณธ๋‹ค: ServiceApplicationClient . ์„œ๋ฒ„๊ฐ€ ์‹ค์ œ๋กœ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ ์•Œ๋ ค์ค„๊นŒ์š”?

@clintonb ๋‹˜ ๋ง์”€์ด ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ง€๊ธˆ์€ ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—†์Šต๋‹ˆ๋‹ค.
ํ•„์š”ํ•˜์‹  ๋ถ„์€ PR์„ ๋ฐœํ–‰ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” ํ™•์‹คํžˆ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์œ ์šฉํ• ๊นŒ์š”?

์ž ๊น, ์ด๋ฏธ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? signed_token_generator ๋Š” jwt๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด ์ƒ์„ฑ๊ธฐ๋ฅผ Server ์— ์ „๋‹ฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด

์ด ๋ฌธ์ œ๊ฐ€ JWT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ oauth2 ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ธ์ง€ ๋˜๋Š” JWT ํ† ํฐ์„ access_token์œผ๋กœ ์ƒ์„ฑ ํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์ „ ์˜๊ฒฌ์€ ํ›„์ž์˜ ๊ฒฝ์šฐ๋ฅผ ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค...

์ €๋Š” JWT/RFC7519 ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๊นŠ์€ ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์„ ๋•Œ ๊ฐ€๋Šฅํ•œ ํ•œ

์ด๊ฒƒ์€ ๋‚˜์˜ ํ˜„์žฌ ๊ฐœ์ธ์ ์ด๊ณ  ์ง์—…์ ์ธ ์ค‘์š”ํ•œ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

  1. ์ด๊ฒƒ์ด ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ๋„์›€์ด ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  2. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๊ฐ€์žฅ ์ž˜ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  3. ๋‚ด๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค๋ฉด PR์ด ์Šน์ธ๋˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๊นŒ?
  4. ์ œํŠธ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์€ JWT๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹ค๋ฅธ ๋ณด๋ฅ˜ ์ค‘์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋‚ด ์ž์‹ ์˜ PR์„ ์–ป๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•  ๋ฌด์–ธ๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์†Œ์Šค์— ์ฒดํฌ๋œ "๊ธฐ๊ณ ์ž ๊ฐ€์ด๋“œ"๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ˜„์žฌ ์š”๊ตฌ ์‚ฌํ•ญ์ด JWT๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ๋ฌป๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ์—ฌ๊ธฐ์—์„œ ์ถ”์ ํ•˜๋„๋ก ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

JWT ์ง€์›์€ ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ๋œ RequestValidator ๊ตฌํ˜„๊ณผ ํ† ํฐ ์ƒ์„ฑ์„ ์œ„ํ•œ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ฃผ์ž…์— ๊ด€ํ•œ ์ดˆ๊ธฐ ์—ฐ๊ตฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ๊ฒƒ์ด ์ ์–ด๋„ oauthlib ์•„ํ‚คํ…์ฒ˜์˜ ํ˜„์žฌ ๋ชฉํ‘œ์ž…๋‹ˆ๊นŒ?

์ฝ”๋“œ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋ฉด #488์ด JWT ํ† ํฐ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜/๋ชจ๋“  ํ›„ํฌ ํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. (๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ๋งˆ์Œ์ด์ง€๋งŒ ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค)

๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ํ›„ํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ๋“  ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ๊ณผ๊ฑฐ ๋ณ‘ํ•ฉ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๋ฅผ ๋ฌผ์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ–ฅํ›„ ๋ณ‘ํ•ฉ์˜ ์ผ๋ถ€๋กœ ์–‘์„ฑ ๋ฐ ์Œ์„ฑ ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: ์ด ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์ดˆ๊ธฐ ๋ฌธ์ œ๋Š” ๋งํฌ๋œ ๋งํฌ๊ฐ€ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š๊ณ  RFC๊ฐ€ ์„ ํ–‰๋˜์—ˆ์œผ๋ฏ€๋กœ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๊ณ  ๊ตฌ์‹์ด๋ฏ€๋กœ ํ˜ผ๋™์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก OP ๋งํฌ๋ฅผ ํŽธ์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค @ ib-lundgren์€ ์ด์ œ ์ด์ „ ๋ฐ์ดํ„ฐ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ RFC:

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•œ JWT ํ”„๋กœํ•„ ( Docs/Grants/JWT ์ฐธ์กฐ)์— ๋Œ€ํ•ด ์ฒ˜์Œ์— ๋…ผ์˜ํ–ˆ์ง€๋งŒ ํ˜„์žฌ ๊ตฌํ˜„๋œ JWT ํ† ํฐ์œผ๋กœ ๋ถ„๊ธฐ๋œ ์ด ์˜ค๋ž˜๋œ ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค( Docs/Tokens/Bearer- ์—์„œ JWT ํ† ํฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์ฐธ์กฐ).

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ RFC7523์œผ๋กœ ์•Œ๋ ค์ง„ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด JWT ํ”„๋กœํ•„ ์„ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ฝ๋‹ˆ๋‹ค.

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