OAuth2
๐ Oauth2? ๊ทธ๋ผ Oauth1๋?
๐ Oauth2 ๋์ ๊ณผ์
RFC6749(Oauth 2.0) ๋ฌธ์๋ฅผ ํ ๋๋ก ์์ฝํ์ฌ ์ ๋ฆฌํ ๊ธ์ด๋, ์์ธํ ๋ด์ฉ์ ํด๋น ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
What? Why?
์ธ์ฆ(authentication)์ด ์๋ ์ธ๊ฐ(authorization)
์ ์ด์ ์ ๋ง์ถ๋ฉฐ, ๋ฆฌ์์ค ์์ ์๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์์ ์ ๋ฆฌ์์ค์ ๋ํ ์ ํ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋๋ก ํ๋ ํ๋ ์์ํฌ
์ญํ
- Resource Owner
- ๋ณดํธ๋ ๋ฆฌ์์ค(Protected Resource)์ ์ค์ ์์ ์ ํน์ ์ฃผ์ฒด
- ex) ์ฌ์ฉ์์ ๊ณ์ , ์ฌ์ฉ์ ๋ฐ์ดํฐ
- Resource Server
- ๋ณดํธ๋ ๋ฆฌ์์ค๋ฅผ ํธ์คํ (์ ์ฅ ๋ฐ ๊ด๋ฆฌ)ํ๊ณ ์๋ ์๋ฒ
- ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ณตํ๋ ์ก์ธ์ค ํ ํฐ์ ๊ฒ์ฆํ๊ณ , ์ ํจํ ํ ํฐ์ด๋ฉด ๋ฆฌ์์ค ์ ๊ทผ์ ํ์ฉ
- Client
- ๋ฆฌ์์ค ์์ ์๋ฅผ ๋์ ํ์ฌ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค๊ณ ์์ฒญํ๋ ์ ํ๋ฆฌ์ผ์ด์
- ex) ์น ์ ํ๋ฆฌ์ผ์ด์ , ๋ชจ๋ฐ์ผ ์ฑ, ๋ฐ์คํฌํฑ ํ๋ก๊ทธ๋จ ๋ฑ
- Authorization Server
- ํด๋ผ์ด์ธํธ์ ๊ถํ ์์ฒญ์ ์ธ์ฆ/์ธ๊ฐํ๊ณ , ์ก์ธ์ค ํ ํฐ(ํน์ ๋ฆฌํ๋ ์ ํ ํฐ)์ ๋ฐ๊ธํ๋ ์๋ฒ
- Resource Owner์ Client ์ฌ์ด์์ ์์ ํ๊ฒ ํ ํฐ์ ์ฃผ๊ณ ๋ฐ๋๋ก ์ค์ฌ
Oauth 1.0 vs 2.0
๊ธฐ์กด Oauth 1.0
์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์์๋๋ฐ, ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด Oauth 2.0
์ด ๋ง๋ค์ด์ก๋ค.
1.0
- ๋ณต์กํ ์๋ช
ํ๋ก์ธ์ค
- ๊ฐ ์์ฒญ๋ง๋ค ์๋ช ์ ์์ฑ
- ์ ์ฐ์ฑ ๋ถ์กฑ
- ํน์ ํ ์ธ์ฆ ํ๋ก์ฐ์ ๊ตญํ๋์ด ์์
- ex) ๋ชจ๋ฐ์ผ ์ฑ, ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA) ๋ฑ
- ๋ณด์์์ ์ ์ฝ
- HTTPS์ ๊ฐ์ ์ ์ก ๊ณ์ธต ๋ณด์์ ์์ ํ ๋์ฒดํ ์ ์์
- ์๋ช ๊ด๋ฆฌ ์์ฒด๊ฐ ๋ณด์ ์ํ ์์ ๊ฐ๋ฅ์ฑ
- ํ์ฅ์ฑ์ ํ๊ณ
2.0
- ๋จ์ํ๋ ์ธ์ฆ ํ๋ก์ธ์ค
- ์๋ช ๊ธฐ๋ฐ ์ธ์ฆ์ ์ ๊ฑฐํ๊ณ HTTPS๋ฅผ ๊ธฐ๋ณธ ๋ณด์ ๊ณ์ธต์ผ๋ก ์ฌ์ฉ
- ๋ค์ํ ์ธ์ฆ ํ๋ก์ฐ ์ง์
- ๋ค์ํ ์ธ์ฆ ํ๋ก์ฐ(๊ทธ๋ํธ ํ์ )๋ฅผ ์ง์
- ex) Authorization Code, Implicit, Client Credentials ๋ฑ
- ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ ํฅ์
- ๋ชจ๋์ ์ํคํ ์ฒ๋ฅผ ์ฑํํ์ฌ ํ์์ ๋ฐ๋ผ ํ์ฅ ๊ฐ๋ฅ
- ex) PKCE(Proof Key for Code Exchange)
- ํฅ์๋ ๋ณด์ ๊ธฐ๋ฅ
- ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ
- ํ ํฐ์ ๋ฒ์(scope) ์ธ๋ถํ
- ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ
- SPA๋ ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฝ๊ฒ ํตํฉ ๊ฐ๋ฅ
ํ๋ฆ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
(A) ํด๋ผ์ด์ธํธ๊ฐ ์น์ธ ์์ฒญ
ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค ์์ ์์๊ฒ ์ง์ ์น์ธ ์์ฒญ์ ํ ์ ์๋ค. ์ธ์ฆ ์์ฒญ์ ๋ฆฌ์์ค ์์ ์ ์ง์ ์ด๋ฃจ์ด์ง ์๋ ์๊ณ ์ค๊ฐ์๋ก์ ์ธ์ฆ ์๋ฒ๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ ์๋ค.
(B) ์ธ์ฆ ๋ถ์ฌ๋ฅผ ๋ฐ์
ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค ์์ ์์ ์ธ์ฆ์ ๋ํ๋ด๋ ์๊ฒฉ ์ฆ๋ช ์ธ ์ธ์ฆ ๋ถ์ฌ๋ฅผ ๋ฐ๋๋ค. ๋ช ์ธ์์ ์ ์๋ ๋ค ๊ฐ์ง ์ ํ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํ์ฅ ๋ถ์ฌ ์ ํ์ ์ฌ์ฉํ์ฌ ํํ๋๋ค. ์ธ์ฆ ๋ถ์ฌ ์ ํ์ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ์ ์์ฒญํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์ธ์ฆ ์๋ฒ๊ฐ ์ง์ํ๋ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
(C) ์์ธ์ค ํ ํฐ ์์ฒญ
ํด๋ผ์ด์ธํธ๋ ๊ถํ ๋ถ์ฌ ์๋ฒ๋ก ์ธ์ฆํ๊ณ ๊ถํ ๋ถ์ฌ๋ฅผ ์ ์ํ์ฌ ์ก์ธ์ค ํ ํฐ์ ์์ฒญํ๋ค.
(D) ์์ธ์ค ํ ํฐ ๋ฐ๊ธ
์ธ์ฆ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ธ์ฆํ๊ณ ์ธ์ฆ ๋ถ์ฌ๋ฅผ ๊ฒ์ฆํ ํ์, ์ ํจํ ๊ฒฝ์ฐ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธํ๋ค.
(E) ์ธ์ฆ
ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค ์๋ฒ์์ ๋ณดํธ๋๋ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ณ ์ก์ธ์ค ํ ํฐ์ ์ ์ํ์ฌ ์ธ์ฆํ๋ค.
(F) ์์ฒญ ์ฒ๋ฆฌ
๋ฆฌ์์ค ์๋ฒ๋ ์ก์ธ์ค ํ ํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ ์ ํจํ ๊ฒฝ์ฐ, ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
๋ค์ ์ฅ์ ์ด์ด์..
์๋ฃ ์ถ์ฒ
RFC 6749
ChatGPT