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
์ฌ์์๋ 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์ ์์ํฉ๋๋ค.
์ด์ ๋ํด ์งํํ๊ธฐ ์ ์ ๊ณผ๊ฑฐ์ ์์๋ ๋ ผ์๋ฅผ ์์ฝํ๊ณ ์ถ์ต๋๋ค.
WWW-Authenticate
๋ฅผ ์ค์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ HTTP ์ํ์ ๋ํด 401 ๋์ 400์ ์ฑํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ผ๋ฉฐ ๋ชจ๋ ์ค๋ฅ ์๋ต์์ ํญ์ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค.401
๊ฐ 400
์ฌ์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ 401
๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.invalid_client
, HTTP ์ธ์ฆ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ $ 401
์ฌ์ผ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด 401
์ ์์ต๋๋ค.invalid_token
, ์ฌ๊ธฐ์ 401
์ฌ์ผ ํฉ๋๋ค.์ด์จ๋ 401
๊ฐ ์ฌ์ฉ๋๋ฉด WWW-Authenticate
๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค( RFC2616 ).
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ OAuth2.0 ๊ตฌํ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์๋ ์ ๋ฐ์ ์ธ ํฉ์์ ์ ์ฌํฉ๋๋ค.
400
so-question / so-question ์ ๋ฐํํฉ๋๋ค.400
salesforce-forum ์ ๋ฐํํฉ๋๋ค.WWW-Authenticate
azur-docs ์ ํจ๊ป $ 401
๋ฅผ ๋ฐํํฉ๋๋ค.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์ ์ ํํ ํ ์คํธ๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๊น? ๊ฐ์ฌ ํด์!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด์ ๋ํด ์งํํ๊ธฐ ์ ์ ๊ณผ๊ฑฐ์ ์์๋ ๋ ผ์๋ฅผ ์์ฝํ๊ณ ์ถ์ต๋๋ค.
WWW-Authenticate
๋ฅผ ์ค์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ HTTP ์ํ์ ๋ํด 401 ๋์ 400์ ์ฑํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ผ๋ฉฐ ๋ชจ๋ ์ค๋ฅ ์๋ต์์ ํญ์ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค.401
๊ฐ400
์ฌ์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋401
๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.invalid_client
, HTTP ์ธ์ฆ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ $401
์ฌ์ผ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด401
์ ์์ต๋๋ค.invalid_token
, ์ฌ๊ธฐ์401
์ฌ์ผ ํฉ๋๋ค.์ด์จ๋
401
๊ฐ ์ฌ์ฉ๋๋ฉดWWW-Authenticate
๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค( RFC2616 ).๊ธฐํ OAuth2.0 ๊ตฌํ
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ OAuth2.0 ๊ตฌํ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์๋ ์ ๋ฐ์ ์ธ ํฉ์์ ์ ์ฌํฉ๋๋ค.
400
so-question / so-question ์ ๋ฐํํฉ๋๋ค.400
salesforce-forum ์ ๋ฐํํฉ๋๋ค.WWW-Authenticate
azur-docs ์ ํจ๊ป $401
๋ฅผ ๋ฐํํฉ๋๋ค.400
aws-cognito-docs๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ค์ HTTP ์ธ์ฆ์ด ์ฌ์ฉ๋ ๋ RFC์ " MUST "๋ฅผ401
๋ก ๊นจ๋จ๋ ธ์ต๋๋ค.๊ฒฐ๋ก
RFC์ ๋ง์ถฐ์ผ ํ์ง๋ง ๊ตฌํ์ ์ค๋จํ์ง ์์ผ๋ ค๋ฉด ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ 2.xx ๋ฒ์ ์ ํฌํจํ์ง ์๊ณ 3.xx๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
๋ถ๋ด์์ด ๋ผ์ด์ฃผ์ธ์.