Oauthlib: ์˜ค๋ฅ˜ ์‘๋‹ต ์‹œ ์ž˜๋ชป๋œ HTTP ์ƒํƒœ

์— ๋งŒ๋“  2014๋…„ 09์›” 15์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: oauthlib/oauthlib

RFC 6749 ์„น์…˜ 5.2(http://tools.ietf.org/html/rfc6749#section-5.2)๋Š” ์˜ค๋ฅ˜ ์‘๋‹ต์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ HTTP 400(์ž˜๋ชป๋œ ์š”์ฒญ)์œผ๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ oauthlib๋Š” InvalidClientError , InvalidGrantError , UnauthorizedClientError ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ์˜ค๋ฅ˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด HTTP 401(Unauthorized)์„ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/idan/oauthlib/blob/master/oauthlib/oauth2/rfc6749/errors.py#L181

Contributor Friendly

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

์ด์— ๋Œ€ํ•ด ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๊ณผ๊ฑฐ์— ์žˆ์—ˆ๋˜ ๋…ผ์˜๋ฅผ ์š”์•ฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • OAuth2.0 RFC6749 ์ž‘์—… ๊ทธ๋ฃน ์€ WWW-Authenticate ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ HTTP ์ƒํƒœ์— ๋Œ€ํ•ด 401 ๋Œ€์‹  400์„ ์ฑ„ํƒํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์œผ๋ฉฐ ๋ชจ๋“  ์˜ค๋ฅ˜ ์‘๋‹ต์—์„œ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • @asteinlein ์€ oauthlib์˜ ์˜ค๋ฅ˜๋ฅผ 400์—์„œ 401๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด https://github.com/oauthlib/oauthlib/pull/247 ์—์„œ PR์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. _์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋Š” ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ API ํ˜ธ์ถœ์— ๋Œ€ํ•ด 401์„ ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค_. ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค์ด์–ด์•ผ ํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ง๊ฐ€์กŒ๋Š”์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
  • ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ ํŒ์—… https://github.com/oauthjs/angular-oauth2/issues/31 https://github.com/oauthjs/angular-oauth2/issues/32#issuecomment -88888755 https://github .com/oauthjs/angular-oauth2/issues/36 . ์ด์ œ ๋ฌธ์ œ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์Šค๋ ˆ๋“œ์™€ RFC6749#5.2 ์˜ ์ „๋ฐ˜์ ์ธ ํ•ฉ์˜๋Š” oauthlib์˜ ๋ชจ๋“  401 ๊ฐ€ 400 ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 401 ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. invalid_client , HTTP ์ธ์ฆ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ $ 401 ์—ฌ์•ผ ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 401 ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. invalid_token , ์—ฌ๊ธฐ์„œ 401 ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  401 ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด WWW-Authenticate ๋ฅผ ์„ค์ • ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( RFC2616 ).

๊ธฐํƒ€ OAuth2.0 ๊ตฌํ˜„

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ OAuth2.0 ๊ตฌํ˜„์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ๊ฐœ์š”๋Š” ์ „๋ฐ˜์ ์ธ ํ•ฉ์˜์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • Google์€ 400 so-question / so-question ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Salesforce์—์„œ 400 salesforce-forum ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Azur๋Š” $ WWW-Authenticate azur-docs ์™€ ํ•จ๊ป˜ $ 401 ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • AWS๋Š” 400 aws-cognito-docs๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ HTTP ์ธ์ฆ์ด ์‚ฌ์šฉ๋  ๋•Œ RFC์˜ " MUST "๋ฅผ 401 ๋กœ ๊นจ๋œจ๋ ธ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

RFC์— ๋งž์ถฐ์•ผ ํ•˜์ง€๋งŒ ๊ตฌํ˜„์„ ์ค‘๋‹จํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ 2.xx ๋ฒ„์ „์— ํฌํ•จํ•˜์ง€ ์•Š๊ณ  3.xx๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋‹ด์—†์ด ๋ผ์–ด์ฃผ์„ธ์š”.

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

์‚ฌ์–‘์—๋Š” 401์ด ์ž˜๋ชป๋œ ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธ์ฆ ํ—ค๋” ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์ธ์ฆ์ด ์™„๋ฃŒ๋  ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. oauthlib๋Š” ํ˜„์žฌ ์‚ฌ์–‘์—์„œ ์š”๊ตฌํ•˜๋Š” ๋Œ€๋กœ 'WWW-Authenticate' ํ—ค๋” ํ•„๋“œ๊ฐ€ ์‘๋‹ต์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜์— ๋Œ€ํ•ด 401์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์˜ˆ์™ธ์— ํ—ค๋” ์ œ์•ˆ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์–‘์— ๊ด€ํ•ด์„œ๋Š” ์‚ฌ์–‘์— 401์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ 400์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ์Šน์ธ๊ณผ ํŠนํžˆ ์Šน์ธ๋˜์ง€ ์•Š์€ ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜ ๋ชจ๋‘์—์„œ 401์ด ๋” ์ ์ ˆํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

@asteinlein , @lepture , @masci ์ƒ๊ฐ?

@ib-lundgren ์•ˆ๋…•ํ•˜์„ธ์š”-์ด ๋ฐ”๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•˜์—ฌ ์ฐจ์ž„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์‚ฌ์–‘์„ ์ฝ๊ณ  ๋‹ค๋ฅธ ๋‹ต๋ณ€์„ ์‚ดํŽด๋ณด๋‹ˆ IMO a 400์ด ์ •๋‹ต์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์‚ฌ์–‘:

์ธ์ฆ ์„œ๋ฒ„๊ฐ€ HTTP 400(์ž˜๋ชป๋œ ์š”์ฒญ)์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
์ƒํƒœ ์ฝ”๋“œ(๋‹ฌ๋ฆฌ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ) ๋ฐ ๋‹ค์Œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
์‘๋‹ต์ด ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜:

400 ์š”๊ตฌ ์‚ฌํ•ญ์—๋Š” MUST๊ฐ€ ์—†์ง€๋งŒ MAY๋„ ์—†์Šต๋‹ˆ๋‹ค.

๋‘˜์งธ, ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•œ ์ด์œ ๋Š” ๋‚ด ํด๋ผ์ด์–ธํŠธ์˜ Sun JDK์— ์žˆ๋Š” ์ผ์ข…์˜ ๋ฒ„๊ทธ๋ฅผ ํ†ตํ•ด์„œ์˜€์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ ์ฐธ์กฐ: http://stackoverflow.com/a/7524681/1137254 ).

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์Šคํƒ์€ 401์— ๋Œ€ํ•ด ์ผ์ฐ ์—ฐ๊ฒฐ์„ ๋‹ซ์ง€๋งŒ ์œ„์˜ OAuth ์Šคํƒ(google-http-oauth-client)์€ ๊ณ„์†ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด 401 (์—…๋ฐ์ดํŠธ : ์‹ค์ œ๋กœ '์ŠคํŠธ๋ฆฌ๋ฐ'๋ชจ๋“œ์™€ ๊ด€๋ จ์ด ์žˆ์Œ)์— ๋Œ€ํ•œ ์ •์˜ ๋ฐ ๊ธฐ๋Œ€์— ๋”ฐ๋ผ OpenJDK์— ์ž‘์„ฑ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. IMO OpenJDK๋„ ์ž˜๋ชป๋˜์—ˆ์œผ๋ฉฐ /token ๋์  ์š”์ฒญ ์ค‘์— "invalid_client" 401์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์˜ฌ๋ฐ”๋ฅธ ์˜ค๋ฅ˜ ์ฝ”๋“œ์ธ 400์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํˆฌํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ์•ฑ์—์„œ oauth2 ์ธ์ฆ์„ ์œ„ํ•ด django-oauth2-provider๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ด ๊ฒฝ์šฐ 400์„ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  Django ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์œ„ํ•ด django-oauth-toolkit(oauthlib ์‚ฌ์šฉ)์œผ๋กœ ์ „ํ™˜ํ•  ๋•Œ ๋ชจ๋ฐ”์ผ ์•ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€์‹  400์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ† ํฐ ์š”์ฒญ ๋ณด๊ธฐ๋ฅผ ํ•ดํ‚นํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ํ† ํฐ์„ ์š”์ฒญํ•  ๋•Œ 400์ด ์ž˜๋ชป๋œ ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์— ๋Œ€ํ•œ ์˜๋„๋œ ์‘๋‹ต์ด๋ฉฐ ๊ทธ ์ด์œ ๋ฅผ ๋ช…์‹œํ•œ ์‚ฌ์–‘ ์ž‘์„ฑ์ž ์ค‘ ํ•œ ๋ช…์ž…๋‹ˆ๋‹ค. https://www.ietf.org/mail-archive/web/oauth/current/msg02127 .html

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ 401์„ ์‚ฌ์šฉํ•˜์—ฌ oauthlib์— ๋Œ€์ฒ˜ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

400์— +1

400์— ํˆฌํ‘œํ•˜์„ธ์š”

์ด ์˜ค๋ž˜๋œ ์Šค๋ ˆ๋“œ๋ฅผ ๋˜์‚ด๋ฆฌ๊ณ  ์œ„์—์„œ ์ œ์•ˆํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ PR์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๊ณผ๊ฑฐ์— ์žˆ์—ˆ๋˜ ๋…ผ์˜๋ฅผ ์š”์•ฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • OAuth2.0 RFC6749 ์ž‘์—… ๊ทธ๋ฃน ์€ WWW-Authenticate ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜ HTTP ์ƒํƒœ์— ๋Œ€ํ•ด 401 ๋Œ€์‹  400์„ ์ฑ„ํƒํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์œผ๋ฉฐ ๋ชจ๋“  ์˜ค๋ฅ˜ ์‘๋‹ต์—์„œ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • @asteinlein ์€ oauthlib์˜ ์˜ค๋ฅ˜๋ฅผ 400์—์„œ 401๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด https://github.com/oauthlib/oauthlib/pull/247 ์—์„œ PR์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. _์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋Š” ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ API ํ˜ธ์ถœ์— ๋Œ€ํ•ด 401์„ ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค_. ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค์ด์–ด์•ผ ํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ง๊ฐ€์กŒ๋Š”์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
  • ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ ํŒ์—… https://github.com/oauthjs/angular-oauth2/issues/31 https://github.com/oauthjs/angular-oauth2/issues/32#issuecomment -88888755 https://github .com/oauthjs/angular-oauth2/issues/36 . ์ด์ œ ๋ฌธ์ œ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์Šค๋ ˆ๋“œ์™€ RFC6749#5.2 ์˜ ์ „๋ฐ˜์ ์ธ ํ•ฉ์˜๋Š” oauthlib์˜ ๋ชจ๋“  401 ๊ฐ€ 400 ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 401 ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. invalid_client , HTTP ์ธ์ฆ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ $ 401 ์—ฌ์•ผ ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 401 ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. invalid_token , ์—ฌ๊ธฐ์„œ 401 ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  401 ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด WWW-Authenticate ๋ฅผ ์„ค์ • ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( RFC2616 ).

๊ธฐํƒ€ OAuth2.0 ๊ตฌํ˜„

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ OAuth2.0 ๊ตฌํ˜„์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ๊ฐœ์š”๋Š” ์ „๋ฐ˜์ ์ธ ํ•ฉ์˜์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • Google์€ 400 so-question / so-question ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Salesforce์—์„œ 400 salesforce-forum ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Azur๋Š” $ WWW-Authenticate azur-docs ์™€ ํ•จ๊ป˜ $ 401 ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • AWS๋Š” 400 aws-cognito-docs๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ HTTP ์ธ์ฆ์ด ์‚ฌ์šฉ๋  ๋•Œ RFC์˜ " MUST "๋ฅผ 401 ๋กœ ๊นจ๋œจ๋ ธ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

RFC์— ๋งž์ถฐ์•ผ ํ•˜์ง€๋งŒ ๊ตฌํ˜„์„ ์ค‘๋‹จํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ 2.xx ๋ฒ„์ „์— ํฌํ•จํ•˜์ง€ ์•Š๊ณ  3.xx๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋‹ด์—†์ด ๋ผ์–ด์ฃผ์„ธ์š”.

์ €๋กœ ํ•˜์—ฌ๊ธˆ PR #247์„ ํ‘ธ์‹œํ•˜๊ฒŒ ํ•œ ์ด์œ /ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์–ตํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ด๊ฒƒ์„ ๋˜๋Œ๋ฆฌ๋Š” ์ด์œ ๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. @JonathanHuot ์˜ ๋ฉ‹์ง„ ์—ฐ๊ตฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ 3.x์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#561 / oauthlib>= 3.0.0์—์„œ ์ˆ˜์ •๋จ

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ด RFC์— ๋”ฐ๋ฅด๋ฉด ์ž˜๋ชป๋œ ํด๋ผ์ด์–ธํŠธ๋„ ์ƒํƒœ 400์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ํŒจํ‚ค์ง€์—์„œ๋Š” ์—ฌ์ „ํžˆ 401์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @esfandiaryfard , RFC์˜ ์ •ํ™•ํ•œ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

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