Oauthlib: ํด๋ผ์ด์–ธํŠธ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋” ์ด์ƒ client_id๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

https://github.com/oauthlib/oauthlib/issues/495 ๊ฐ€ ๋ณ‘ํ•ฉ๋œ ์ดํ›„ requests/requests-oauthlib์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๋งˆ์Šคํ„ฐ์—์„œ ํšŒ๊ท€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋ถ€์—ฌ/์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋งŒ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค.

requests-oauthlib์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

sess = OAuth2Session(client_id)
token = sess.fetch_token(token_url, client_secret=client_secret, authorization_response=request.url)

๊ทธ๋Ÿฌ๋‚˜ ๋ณ€๊ฒฝ ์ดํ›„ ์„ธ์…˜์˜ client_id ๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. https://github.com/oauthlib/oauthlib/pull/505 ๊ฐ€ ์œ ์Šค ์ผ€์ด์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์ผ€์ด์Šค๋ฅผ ๋ง๊ฐ€๋œจ๋ ธ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์œˆ-์œˆ ์†”๋ฃจ์…˜์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/requests/requests-oauthlib/blob/master/requests_oauthlib/oauth2_session.py#L196 -L198์—์„œ ์š”์ฒญ-oauthlib ์ฝ”๋“œ ํ˜ธ์ถœ ๋ฐ ์—ฌ๊ธฐ์—์„œ oauthlib ๋ฌธ์ œ
https://github.com/oauthlib/oauthlib/blame/master/oauthlib/oauth2/rfc6749/clients/web_application.py#L128.

Bug Discussion OAuth2-Client

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

client_id ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์žฌ์ •์˜ํ•˜๋ ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐ ํˆฌํ‘œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ, ๋กœ๊ทธ์ธํ•ด์•ผ DeprecationWarning ์˜ ๊ฒฝ์šฐ client_id kwarg ๋ชจ๋“  ์ œ๊ณต๋˜์—ˆ๋‹ค?

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

๋‚ด ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ WebApplicationClient ์ƒ์„ฑ์ž์— ์„ค์ •๋œ self.client_id ์‚ฌ์šฉํ•˜๋„๋ก prepare_request_body ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ &client_id=xx ๋ฅผ prepare_request_body ์ถœ๋ ฅ์— ์ถ”๊ฐ€ํ•˜๋„๋ก ์ธ๋ผ์ธ ๋ฌธ์„œ๋ฅผ ์ ์ ˆํžˆ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์›๋ž˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ˆ˜์—์„œ client_id ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  prepare_request_body ์™€ ๊ฐ™์ด include_client=True/False prepare_request_body ์ƒˆ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ client_id ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. client_secret ๋ฅผ ๋ณธ๋ฌธ์— ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ํฌํ•จํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ƒ๊ฐ?

ํฌ์ผ€ @Diaoul @skion @thedrow

์ด๊ฑด ์–ด๋–ค๊ฐ€์š”:

args์—์„œ client_id๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  include_client=True/False์™€ ๊ฐ™์€ ์ƒˆ ์ธ์ˆ˜๋ฅผ prepare_request_body์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณธ๋ฌธ์— client_id์™€ client_secret์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”

์‹ค์ œ๋กœ ๋‚ด ํ…Œ์ŠคํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์ง€๋งŒ https://github.com/requests/requests-oauthlib/issues/330 ์—์„œ requests/oauthlib์— ๋Œ€ํ•ด ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์‹ค์ œ๋กœ requests_oauthlib์˜ ์ž˜๋ชป์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ๋ฌธ์„œ - ์‹ค์ œ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•  ๋•Œ ์ „์ฒด ๋ฌธ์„œ์˜ ์ฒซ ๋ฒˆ์งธ ์˜ˆ - OAuth2Session ์ƒ์„ฑ์ž์—์„œ client_id ์ง€์ •์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. 200ํ–‰์˜ ๋…ผ๋ฆฌ๋Š” kwargs์—์„œ client_id ๊ฐ€์ ธ์˜ค์ง€๋งŒ ์ด๋ฏธ ๊ตฌ์„ฑ๋œ WebApplicationClient ์ธ์Šคํ„ด์Šค์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํด๋ฐฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

@jvanasco , ํ˜„์žฌ ๋ฌธ์ œ #585๋Š” requests-oauthlib ๋‹จ๋…์œผ๋กœ ๋˜๋Š” oauthlib์˜ PR #505๋ฅผ ๋˜๋Œ๋ ค์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์†”๋ฃจ์…˜๋„ https://github.com/oauthlib/oauthlib/pull/505#issuecomment -351221107์—์„œ @skion ์ด ์–ธ๊ธ‰ํ•œ ๋™์ž‘์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

Oauthlib๋Š” requests-oauthlib๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์šฐ์•„ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ† ๋ก ์—์„œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฑฐ๋Œ€ํ•œ ์ฐจ๋‹จ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ˆ˜๊ฒ ์Šต๋‹ˆ๊นŒ client_id=False ์—์„œ prepare_request_body() CLIENT_ID๊ฐ€ ์•„๋‹˜์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋„์›€์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค? ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด๋„ 126ํ–‰ ๊ทผ์ฒ˜์—์„œ ์ด ์ถ”์•…ํ•จ์„ ์ดˆ๋ž˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

client_id = None if client_id=False else self.client_id

์•„, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค.

client_id๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๊ธฐ์กด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชฉ๋ก์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ ๋‹น์žฅ ๋‚ด ์ž‘์—… ์ค‘ ์ผ๋ถ€๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์™€ ์š”์ฒญ oauthlib๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

@JonathanHuot

args์—์„œ client_id๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  include_client=True/False์™€ ๊ฐ™์€ ์ƒˆ ์ธ์ˆ˜๋ฅผ prepare_request_body์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณธ๋ฌธ์— client_id์™€ client_secret์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์ฝ์–ด๋ณด๋‹ˆ ๋‹น์‹ ์˜ ์ œ์•ˆ์ด ์ •๋ง ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ **kwargs ์ทจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ ๊นจ์ง€์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ทธ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์ฐธ๊ณ  ์‚ฌํ•ญ:

๋ณธ๋ฌธ์— client_id์™€ client_secret์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด

์ด๊ฒƒ์€ ๊ณต๊ฐœ ํด๋ผ์ด์–ธํŠธ IIUC์— ๊ด€ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ client_secret ๊ฐ€ ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. client_id ์ด ๋ณธ๋ฌธ์— ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๊นŒ? ์ด ๊ฒฝ์šฐ ์ƒˆ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ include_client_id=True/False ๋ฐ”๊พธ๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์ƒˆ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ include_client_id=True/False๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ! client_secret ๊ทธ๊ฒƒ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์—ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค WebApplicationClient .

@jvanasco , PR์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
1) https://github.com/oauthlib/oauthlib/pull/505 ๋˜๋Œ๋ฆฌ๊ธฐ
2) ๋ณ€๊ฒฝ ์„œ๋ช… prepare_request_body() ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค client_id ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค include_client_id=True/False ( True (๊ธฐ๋ณธ๊ฐ’) :์ด ์ถ”๊ฐ€ self.client_id )

๊ทธ๋Ÿฐ ๋‹ค์Œ requests-oauthlib๋Š” https://github.com/requests/requests-oauthlib/blob/master/requests_oauthlib/oauth2_session.py#L196-L211์—์„œ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
A) ๋ณธ๋ฌธ์— client_id ๋งŒ ํฌํ•จ

self._client.prepare_request_body(..)

B) client_id ๋ฐ client_secret ๋ฅผ auth ํฌํ•จํ•˜๊ณ  ๋ณธ๋ฌธ์—๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Œ(RFC ๊ธฐ๋ณธ ์†”๋ฃจ์…˜)

self._client.prepare_request_body(include_client_id=False, ..)
auth = requests.auth.HTTPBasicAuth(client_id, client_secret)

C) ๋ณธ๋ฌธ์— client_id ๋ฐ client_secret (RFC ๋Œ€์ฒด ์†”๋ฃจ์…˜)

self._client.prepare_request_body(client_secret=client_secret, ..)

์˜ค๋Š˜ ๋‘ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ PR์„ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

OAuthlib์— ๋Œ€ํ•œ PR ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์˜ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ...

client_id ์—ฌ์ „ํžˆ kwarg๋กœ ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด๋Š” ๋ถ€๋ถ„์ ์œผ๋กœ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ ๊ฒƒ์ด์ง€๋งŒ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์ด ๋‹ค์†Œ ์ž˜๋ชป๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋‚˜( prepare_request_body ์—์„œ self.client_id๋ฅผ ์žฌ์ •์˜ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด) ์ž˜๋ชป๋œ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”(์˜ˆ๋ฅผ ๋“ค์–ด client_id ๊ฐ€ ์ œ๊ณต๋˜์—ˆ์ง€๋งŒ self.client_id ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

client_id ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์žฌ์ •์˜ํ•˜๋ ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐ ํˆฌํ‘œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ, ๋กœ๊ทธ์ธํ•ด์•ผ DeprecationWarning ์˜ ๊ฒฝ์šฐ client_id kwarg ๋ชจ๋“  ์ œ๊ณต๋˜์—ˆ๋‹ค?

PR #593์ด ์ œ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. client_id ๊ฐ€ ์ œ์ถœ๋˜๋ฉด DeprecationWarning ์„ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  self.client_id ์™€ ๋‹ค๋ฅด๋ฉด ValueError ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. @JonathanHuot๊ฐ€ ์ž์„ธํžˆ ์„ค๋ช…ํ•œ ์„ธ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ requests-oauthlib PR ํ›„๋ณด์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ํ•ญ์ƒ ํ˜ธ์ถœ prepare_request_body ๊ฐ€์ง„ username=username, password=password . ์ด๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ RFC์— ๋” ์ต์ˆ™ํ•˜๊ณ  ๋‹ค์Œ์— ๋Œ€ํ•œ ๋‹ต์„ ์•Œ๊ณ  ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  1. username + password ๊ฐ€ request.body ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  2. username + password ๊ฐ€ HTTP ๊ธฐ๋ณธ ์ธ์ฆ ํ—ค๋”์— ๋‚˜ํƒ€๋‚˜๋ฉด ์š”์ฒญ ๋ณธ๋ฌธ์— ์ค‘๋ณต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  3. username + password ๋ณธ๋ฌธ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํด๋ผ์ด์–ธํŠธ ์„ธ๋ถ€์ •๋ณด๊ฐ€ ํฌํ•จ๋œ HTTPBasicAuth ํ—ค๋”๋ฅผ ๋ชจ๋‘ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‹คํ–‰ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  1. username ๋ฐ password ๋Š” ํ•ญ์ƒ ์š”์ฒญ ๋ณธ๋ฌธ์— ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ถŒํ•œ ๋ถ€์—ฌ(์•”์‹œ์ , ์ฝ”๋“œ, ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…)์— ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  2. HTTP ๊ธฐ๋ณธ ์ธ์ฆ์€ ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…์— ๋Œ€ํ•ด ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค(๊ธฐ๋ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๊ถŒ์žฅ(์˜ˆ: client_secret )). ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช…์€ HTTP ๊ธฐ๋ณธ ์ธ์ฆ์ด ์•„๋‹ˆ ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ์˜ˆ

๊ฐ์‚ฌ ํ•ด์š”. ๋‘ ๊ฐ€์ง€๋งŒ ๋ช…ํ™•ํžˆ ํ•˜๊ณ , ์ œ๊ฐ€ ๋‹ค์„ฏ ์‚ด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ž์œ ๋กญ๊ฒŒ ์ด์•ผ๊ธฐํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ์ด ํ…Œ์ŠคํŠธ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ด๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ํŠน์ • ์œ ํ˜•์˜ ๊ถŒํ•œ ๋ถ€์—ฌ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญ ๋ณธ๋ฌธ์—๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋˜์ง€ ์•Š๋Š” ํ•œ ์กด์žฌํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

  1. Http ๊ธฐ๋ณธ ์ธ์ฆ์ด ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๋ฉด ๊ธฐ์กด requests-oauthlib์—๋Š” ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ฐ ์•”ํ˜ธ ์ฝค๋ณด์—์„œ ๊ธฐ๋ณธ ์ธ์ฆ์„ ์ƒ์„ฑํ•˜๋Š” ๋ธ”๋ก์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์žฅํ™ฉํ•˜๊ณ  ์ง‘์ฐฉํ•˜๋Š” ์ €๋ฅผ ์šฉ์„œํ•ด ์ฃผ์‹ญ์‹œ์˜ค. j๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ์ทจํ•˜๊ณ  ๋˜ ๋‹ค๋ฅธ ํšŒ๊ท€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@jvanasco , OAuth2 RFC์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜ ์žˆ์ง€๋งŒ requests-oauthlib ์™€ flask-oauthlib ์–ด๋–ป๊ฒŒ ๋งž๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์˜ˆ

์˜ณ์€.

  1. ์˜ˆ, AFAIU์—๋Š” https://github.com/requests/requests-oauthlib/blob/master/requests_oauthlib/oauth2_session.py#L207 -L211 ๋ธ”๋ก์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ•˜์ง€๋งŒ ํ˜„์žฅ์˜ ํ˜„์‹ค๊ณผ ๋Œ€์กฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, requests-oauthlib ๋ฐ ๋‹ค๋ฅธ ๊ณต๊ฐœ ๊ณต๊ธ‰์ž ๊ฒฝํ—˜. ์—ฌ๋Ÿฌ ์š”์ฒญ-oauthlib ํ† ๋ก  https://github.com/requests/requests-oauthlib/issues/218 , https://github.com/requests/requests-oauthlib/issues/211 , https://github.com/requests /requests-oauthlib/issues/264 , ์ด๋ฏธ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋“ค์ด client password ์™€ client secret ์‚ฌ์ด์— ํ˜ผ๋™์ด ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ ์ •ํ™•ํžˆ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค.
https://github.com/requests/requests-oauthlib/pull/206 ๋’ค์— ์žˆ๋Š” ๊ทผ๊ฑฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค๋ฉด PR์˜ ๋‚ด์šฉ์€ HTTPAuth(username, password) ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ HTTPAuth(client_id, client_secret ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. (ํด๋ผ์ด์–ธํŠธ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ).

requests-oauthlib์˜ ํ† ๋ก ์— ์ฐธ์—ฌํ•œ @Lukasa , @chaosct , @ibuchanan ์„ ์ฐŒ๋ฅด์‹ญ์‹œ์˜ค.

์—„์ฒญ๋‚œ! ์ •๋ง ๊ณ ๋งˆ์›Œ. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ƒ๊ฐํ–ˆ์ง€๋งŒ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์š”์ฒญ ๋‚ด์šฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์š”์ฒญ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ปค๋ฐ‹์ด ๋ช‡ ๊ฐœ ์žˆ์œผ๋ฏ€๋กœ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ PR ๋ฐ ๊ธฐ๋Šฅ์—์„œ ๋ฌด์—‡์„ ๋ณด๊ณ  ์‹ถ์–ดํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ด๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ํŠน์ • ์œ ํ˜•์˜ ๊ถŒํ•œ ๋ถ€์—ฌ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญ ๋ณธ๋ฌธ์—๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ ํŠน์ • ์œ ํ˜•์˜ ๋ณด์กฐ๊ธˆ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฒญ ๋ณธ๋ฌธ์— ๋ณด๋‚ด๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ ์‚ฌ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ์Šต๋‹ˆ๋‹ค.

์ธ์ฆ ์„œ๋ฒ„๋Š” ๋‹ค์Œ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์š”์ฒญ ๋ณธ๋ฌธ์˜ ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…...

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

๋‚˜๋Š” @JonathanHuot ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์š”์ ์— ๋Œ€ํ•ด ์ •ํ™•ํ•˜๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

@ibuchanan ๋‹˜ , ๊ท€ํ•˜๊ฐ€ ์–ธ๊ธ‰ํ•œ ์ธ์šฉ๋ฌธ์€ client credentials ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž(์‹ค์ œ ์‚ฌ์šฉ์ž)๊ฐ€ ์„ž์ด์ง€ ์•Š๋„๋ก ๋งค์šฐ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ญํ• ์€ ์—ฌ๊ธฐ rfc6749#1.1์— ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด client credentials ๋Š” client_id ๋ฐ client_secret ์ฐธ์กฐํ•˜๊ณ  ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž๋Š” username ๋ฐ password ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๊ตํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ•ด๋‹น ์—ญํ• ๋กœ RFC๋ฅผ ์ฝ๋Š” ๊ฒƒ์€ ์ค€์ˆ˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP Basic์—์„œ ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช… ( client_id , client_secret )์„ ๋ณด๋‚ด์•ผ ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช… ( username , password ) ์š”์ฒญ ๋ณธ๋ฌธ์˜ (์—ฌ๊ธฐ์„œ ๋Œ€์•ˆ์„ ์ฝ์ง€ ๋งˆ์‹ญ์‹œ์˜ค); rfc6749#4.3.2๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

client_id๊ฐ€ ์š”์ฒญ์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ผ๋ถ€ ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค(400).
์‹ ์ฒด. ๊ธฐ๋ณธ๊ฐ’์€ ์‚ฌ์–‘์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ™•์ธ. oauthlib ๋Œ€ํ•œ ํ˜„์žฌ PR์ด ์œ„์˜ ๋ฌธ์ œ๋ฅผ ์ถฉ์กฑํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. include_client_id ํ”Œ๋ž˜๊ทธ๋Š” client_id ์ „์†ก ์—ฌ๋ถ€๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

requests_oauthlib ์—์„œ ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. username ๋ฐ password ๋Š” ๋ณธ๋ฌธ์—๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค(HTTP ๊ธฐ๋ณธ์ด ์•„๋‹˜). ๊ทธ ํ–‰๋™์ด ๋น„ ํ˜ธํ™˜ ์„œ๋ฒ„ ํ†ตํ•ฉ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๊ตฌํ˜„์€ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค auth ๋˜๋Š” headers ์— ์ธ์ˆ˜ fetch_token() .

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

๋‚ด๊ฐ€ @JonathanHuot ๋ฐ @ibuchanan ์œ„ํ•ด ๊ฐ€์ง€๊ณ  ์งˆ๋ฌธ :

oauthlib ์˜ OAuth2 Client ๋ฐ requests_oauthlib ์˜ OAuth2Session ๋Š” client_secret ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ OAuth1์˜ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ด๊ฒƒ์ด #370์˜ ์‹ค์ œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. RFC๋Š” ์ด์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋‚˜๋Š” ์–ด๋–ค ๊ธฐ๋ก๋„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ client_secret ๋ฅผ ์ €์žฅํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ™•์žฅํ•˜๊ณ  fetch_token ๋ฐ request client_secret ์ „๋‹ฌ์— ๋Œ€ํ•œ OAuth2Session ์˜์กด์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค request ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ ์ž์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. (์ด๋Š” https://github.com/requests/requests-oauthlib/issues/264์— ๋ณด๊ณ ๋œ ๋‹ค๋ฅธ ๋ถˆ์ผ์น˜๋„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.)

username/password ๋ฐ client_id/client_secret์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ๋ณ€์ˆ˜๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด oauthlib(#593)์˜ PR์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์ด ๋‘˜ ์‚ฌ์ด์— ํ˜ผ๋™์„ ์ผ์œผํ‚ค๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

requests-oauthlib์— ๋Œ€ํ•ด ์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ: https://github.com/requests/requests-oauthlib/compare/master...jvanasco :fix-oauthlib_client_id

์ด๊ฒƒ์€ ์ข€ ๋” ๊ณผ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ผ์„ ์ž‘๋™์‹œํ‚ค๋ ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. username ๋ฐ password ์€ LegacyApplicationClient ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์œ ์ผํ•œ ์ข…๋ฅ˜์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋งž์Šต๋‹ˆ๊นŒ?). ๊ฒ€์‚ฌ ์•„๋ž˜์— ์‚ฌ์šฉ์ž ์ด๋ฆ„/์•”ํ˜ธ๋ฅผ kwargs ์‚ฌ์ „์— ๋ณ‘ํ•ฉํ•˜๋Š” ์„น์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ์„ ์‹œ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ๋Š” ๋‚ด์–ด์“ฐ๊ธฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  2. client_id/auth ํ—ค๋”๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋…ผ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์œ ํ˜•์˜ ์ธ์ฆ์ด ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์—์„œ ๋ฐœ์ƒํ•˜๋„๋ก ๋‹ค์‹œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ฐ•์ œ ์ ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  3. ์งˆ๋ฌธ: client_secret ๊ฐ€ ํ†ต๊ณผ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋ฌด ์ƒ๊ฐ์ด ์•ˆ ๋‚˜์ง€๋งŒ oAuth ํ๋ฆ„์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ requests-oauthlib ๋ฒ„์ „์—์„œ:

| include_client_id | auth | ํ–‰๋™ |
| ------------------- | --------------- | -------- |
| ์—†์Œ(๊ธฐ๋ณธ๊ฐ’) | ์—†์Œ(๊ธฐ๋ณธ๊ฐ’) | client_id ์‚ฌ์šฉํ•˜์—ฌ Auth ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์— client_id๋ฅผ ๋ณด๋‚ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ RFC์—์„œ ๊ถŒ์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ๋™์ž‘์ž…๋‹ˆ๋‹ค. |
| ์—†์Œ(๊ธฐ๋ณธ๊ฐ’) | ์„ ๋ฌผ | Auth ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. include_client_id=False oauthlib์˜ prepare_request_body ํ˜ธ์ถœ |
| ๊ฑฐ์ง“ | ์„ ๋ฌผ | Auth ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. include_client_id=False oauthlib์˜ prepare_request_body ํ˜ธ์ถœ |
| ์‚ฌ์‹ค | ์„ ๋ฌผ | Auth ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. include_client_id=True oauthlib์˜ prepare_request_body ํ˜ธ์ถœ |
| ์‚ฌ์‹ค | ์—†์Œ(๊ธฐ๋ณธ๊ฐ’) | client_id ์‚ฌ์šฉํ•˜์—ฌ Auth ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. include_client_id=True oauthlib์˜ prepare_request_body ํ˜ธ์ถœ |
| ๊ฑฐ์ง“ | ์—†์Œ(๊ธฐ๋ณธ๊ฐ’) | client_id ์‚ฌ์šฉํ•˜์—ฌ Auth ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. include_client_id=False oauthlib์˜ prepare_request_body ํ˜ธ์ถœ |

๋˜๋Š” ๋‹ฌ๋ฆฌ ๋ช…์‹œ:

  • ์ธ์ฆ ๊ฐ์ฒด ์ƒ์„ฑ

    • ๋ณธ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ๋ณด๋‚ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

    • (include_client_id=์—†์Œ, ์ธ์ฆ=์—†์Œ)

    • (include_client_id=๊ฑฐ์ง“, ์ธ์ฆ=์—†์Œ)

    • ๋ณธ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

    • (include_client_id=์ฐธ, ์ธ์ฆ=์—†์Œ)

  • ๋ช…์‹œ์  ์ธ์ฆ ๊ฐ์ฒด ์‚ฌ์šฉ

    • ๋ณธ๋ฌธ์— client_id๋ฅผ ๋ณด๋‚ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

    • (include_client_id=์—†์Œ, ์ธ์ฆ=authObject)

    • (include_client_id=๊ฑฐ์ง“, ์ธ์ฆ=authObject)

    • ๋ณธ๋ฌธ์— client_id๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

    • (include_client_id=์ฐธ, ์ธ์ฆ=authObject)

@jvanasco : oauthlib ๋ฐ requests-oauthlib ์ธก์—์„œ ๋งค์šฐ ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ 3. ์งˆ๋ฌธ์— ๋Œ€ํ•ด:

client_secret ์—†์ด ๊ณต๊ฐœ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” RFC์˜ ๊ด€์ ์—์„œ ๋น„์–ด ์žˆ์Œ). ๋”ฐ๋ผ์„œ ํŒŒ์ด์ฌ API๋Š” "๋น„๋ฐ€ ์—†์Œ"์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ข…์ข… ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜์ง€๋งŒ ๋น„๋ฐ€์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ณด์•ˆ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ client_secret ์—†์ด client_id ๋ฅผ ์ˆ˜๋ฝํ•˜๊ฑฐ๋‚˜ client_secret (๋˜๋Š” RFC์™€ ๋™์ผํ•œ ๋นˆ client_secret ); ๋˜๋Š” ๋‹ค๋ฅธ PKCE RFC๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(https://oauth.net/2/pkce/ ์ฐธ์กฐ). ๊ทธ๋Ÿฌ๋‚˜ ํ›„์ž๋Š” ์•„์ง oauthlib ์ธก์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”. client_id ์—†์ด client_secret client_id ๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์งˆ๋ฌธ์„ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์–‘์˜ ๊ฐ€๋Šฅํ•œ ์˜ฌ๋ฐ”๋ฅธ ๊ตฌํ˜„์ด ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š” ๋” ๊นจ์ง„ ๊ตฌํ˜„๋„ ์žˆ์Šต๋‹ˆ๋‹ค).

@JonathanHuot ๊ธฐ์กด ๊ตฌํ˜„์€ client_secret ๋Œ€ํ•œ ๋นˆ ๋ฌธ์ž์—ด ์ „์†ก์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋…ผ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/oauthlib/oauthlib/blob/master/oauthlib/oauth2/rfc6749/parameters.py#L90 -L125 -- ํŠนํžˆ 122ํ–‰

์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ํ•ด๋‹น ๋ฃจํ‹ด ์งํ›„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

if ('client_secret' in kwargs) and ('client_secret' not in params):
    if kwargs['client_secret'] == '':
        params.append((unicode_type('client_secret'), kwargs['client_secret']))

๋น„๋ฐ€์ด ๋นˆ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ client_secret ์— ๋Œ€ํ•œ ๋นˆ ๋ฌธ์ž์—ด์„ ๋ณด๋‚ด์ง€๋งŒ ๊ฐ’์ด None ์ด๋ฉด client_secret ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

RFC๊ฐ€ ๋‘ ๊ฐ€์ง€ ๋ณ€ํ˜• ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด... ํ•˜๋‚˜์˜ ๋ณ€ํ˜•๋งŒ ์ง€์›ํ•˜๋Š” ๋งŽ์€ ๊นจ์ง„ ๊ตฌํ˜„์ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์ง€์›ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์›๋ž˜ ๋ฌธ์ œ๋Š” oauthlib์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋™์ž‘์€ https://github.com/requests/requests-oauthlib/pull/331 ์ด ์ˆ˜์ •๋  ๋•Œ๊นŒ์ง€ ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

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