OAuth๋?
์์ ์ด ์์ ํ ๋ฆฌ์์ค์ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ๊ทผํ ์ ์๋๋ก ํ์ฉํด ์ค์ผ๋ก์จ
์ ๊ทผ ๊ถํ์ ์์ํด์ฃผ๋ ๊ฐ๋ฐฉํ ํ์ค ํ๋กํ ์ฝ
โ ์์ ๊ฐ์ด ๊ฐํธํ๊ฒ ํ์๊ฐ์
๋ฐ ๋ก๊ทธ์ธ์ ํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ด OAuth!!
OAuth์ ํ์๋ฐฐ๊ฒฝ
A์ฌ์ดํธ์์ B์ฌ์ดํธ์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์ B์ฌ์ดํธ์ ID์ Password๋ฅผ ์ง์ ๋ถ๋ฌ์์ ์ฌ์ฉ
โข
๋ฐ์ํ๋ ๋ฌธ์
โฆ
์ฌ์ฉ์: A์ฌ์ดํธ์ B์ฌ์ดํธ์ ID์ Password๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒ์ ๋ํด ์ ๋ขฐํ ์ ์๋ค
โฆ
A ์ฌ์ดํธ: ID์ Password๋ฅผ ๋ฐ์๊ธฐ ๋๋ฌธ์ ๋ณด์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ฑ
์์ ์ ธ์ผํ๋ค
โฆ
B ์ฌ์ดํธ: A ์ฌ์ดํธ๋ฅผ ์ ๋ขฐํ ์ ์๋ค
โ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด OAuth ํ์
OAuth 2.0์ 1.0์์ ์๋ ค์ง ๋ณด์ ๋ฌธ์ ๋ฑ์ ๊ฐ์ ํ ๋ฒ์
๋น๊ต | OAuth1.0 | OAuth2.0 |
์ฐธ์ฌ์ ๊ตฌ๋ถ | - ์ด์ฉ์
- ์๋น์
- ์๋น์ค ์ ๊ณต์ | - ์์ ์์ ์
- ํด๋ผ์ด์ธํธ
- ๊ถํ ์๋ฒ
- ์์ ์๋ฒ |
ํ ํฐ | - ์์ฒญ ํ ํฐ(Request Token)
- ์ ๊ทผ ํ ํฐ(Access Token) | - ์ ๊ทผ ํ ํฐ(Access Token)
- ์ฌ๋ฐ๊ธ ํ ํฐ(Refresh Token) |
์ ํจ๊ธฐ๊ฐ | ์ ๊ทผ ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ ์์ | - ์ ๊ทผ ํ ํฐ ์ ํจ๊ธฐ๊ฐ ๋ถ์ฌ
- ๋ง๋ฃ ์ ์ฌ๋ฐ๊ธ ํ ํฐ ์ด์ฉ |
ํด๋ผ์ด์ธํธ | ์น ์๋น์ค | ์น, ์ฑ ๋ฑ |
OAuth์ ๊ตฌ์ฑ์์
โข
Resource Owner : ์น์๋น์ค๋ฅผ ์ด์ฉํ๋ ค๋ ์ ์ , ์์(๊ฐ์ธ์ ๋ณด)๋ฅผ ์์ ํ๋ ์, ์ฌ์ฉ์
โข
Client : ์์ฌ ๋๋ ๊ฐ์ธ์ด ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ
โฆ
ํด๋ผ์ด์ธํธ๋ผ๋ ์ด๋ฆ์ resource server์๊ฒ ํ์ํ ์์์ ์์ฒญํ๊ณ ์๋ตํ๋ ๊ด๊ณ์ฌ์
โข
Authorization Server: ๊ถํ์ ๋ถ์ฌ(์ธ์ฆ์ ์ฌ์ฉํ ์์ดํ
์ ์ ๊ณต) ํด์ฃผ๋ ์๋ฒ
โฆ
์ฌ์ฉ์๋ ์ด ์๋ฒ๋ก ID, PW๋ฅผ ๋๊ฒจ Authorization Code๋ฅผ ๋ฐ๊ธ ๋ฐ์ ์ ์์
โฆ
Client๋ ์ด ์๋ฒ๋ก Authorization Code๋ฅผ ๋๊ฒจ Token์ ๋ฐ๊ธ ๋ฐ์ ์ ์์
โข
Resource Server: ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ ํ๋ฆฌ์ผ์ด์
ํ์ฌ ์๋ฒ (Google, Kakao ๋ฑ)
โฆ
Client๋ Token์ ์ด ์๋ฒ๋ก ๋๊ฒจ ๊ฐ์ธ์ ๋ณด๋ฅผ ์๋ต ๋ฐ์
โข
Access Token: ์์์ ๋ํ ์ ๊ทผ ๊ถํ์ Resource Owner๊ฐ ์ธ๊ฐํ์์์ ๋ํ๋ด๋ ์๊ฒฉ์ฆ๋ช
โข
Refresh Token
โฆ
Client๋ Authorization Server๋ก ๋ถํฐ access token(๋น๊ต์ ์งง์ ๋ง๋ฃ๊ธฐ๊ฐ)๊ณผ refresh token(๋น๊ต์ ๊ธด ๋ง๋ฃ๊ธฐ๊ฐ)์ ํจ๊ป ๋ถ์ฌ ๋ฐ์
โฆ
access token์ ๋ณด์์ ๋ง๋ฃ๊ธฐ๊ฐ์ด ์งง๊ธฐ ๋๋ฌธ์ ์ผ๋ง ์ง๋์ง ์์ ๋ง๋ฃ๋๋ฉด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ๋ค์ ์๋ํด์ผํจ
โ refresh token์ด ์๋ค๋ฉด access token์ด ๋ง๋ฃ๋ ๋ refresh token์ ํตํด access token์ ์ฌ๋ฐ๊ธ ๋ฐ์ ์ฌ ๋ก๊ทธ์ธ ํ ํ์ ์๊ฒ๋ ํ๋ค.
โช
๊ทธ๋ฅ refresh token๋ง ์ฐ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ?
โ refresh token์ ๊ถํ ์๋ฒ์์๋ง ํ์ฉ๋๋ฉฐ ๋ฆฌ์์ค ์๋ฒ์๋ ์ ์ก๋์ง ์์
์ง์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋ ๊ฒ์ด ์๋ ์์
๋ฏธ๋์ด๋ก ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ
client(๊ฐ์ธ ์๋น์ค)๋ Resource Owner(์ฌ์ฉ์)๋ฅผ ๋์ ํด ๋ก๊ทธ์ธ ํ๋๋ฐ
์ด๋, ํ์ํ ์ ๋ณด๋ฅผ Resource Server์์ ์ป์ด ์๋ก ๋น๊ตํด ์ ํจ์ฑ์ ํ๋จ
โ client๊ฐ ์ ์ ์ ๋ก๊ทธ์ธ ์ ๋ณด/ ์์(resource)์ Resource Server์ ์์ฒญํด ๋์ ๋ก๊ทธ์ธ
์ด๋ฅผ ์ํด์ client๊ฐ ๊ฐ์ง๋ ๋จ๊ณ
WHY
Resource Owner(์ ์ ) ์
์ฅ
โข
์์ ์ ์ ๋ณด๋ฅผ ๋์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
client๊ฐ ์ด๋ค ์ ๋ณด๋ฅผ ํ์ฉํ๋์ง, ์ด๋ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋์ง ๋ชจ๋ฆ
โข
๊ฐ์ธ์ ๋ณด๋ฅผ ๋ง๊ตฌ์ก์ด๋ก ์
์ฉํ ์๋ ์์
โ client๋ Resource Owner์ ๋์๋ฅผ ๊ตฌํด์ผ ํจ
Resource Server(Kakao) ์
์ฅ
โข
๋ค๋ฅธ ์ฌ๋์ ์ผ์ ๋์ ํด์ฃผ๋ ์ฌ๋์ด ์ ๋ง ๊ทธ ์ฌ๋์ผ์ง ๊ถ๊ธ
โข
Resource Owner์ ์ผ์ ์ํํด์ฃผ๋ client๊ฐ ์ ๋ง ๊ทธ client์ผ๊น?
โ Resource Server๋ Resource Owner์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด client๋ฅผ ๊ตฌ๋ถํ๋ ๊ฐ(code)๋ฅผ ์ ๋ฌ
์ธ์ฆ ์ข
๋ฅ
Confidential Client | Public Client | |
3-legged | Authorization Code | Implicit |
2-legged | Resource Owner Password Credentials | Client Credentials |
3-legged, 2-legged
Authorization Code Grant (์ธ๊ฐ ์ฝ๋ ์น์ธ)
๊ถํ ๋ถ์ฌ ์น์ธ์ ์ํด ์์ฒด ์์ฑํ Authorization Code๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๋ง์ด ์ฐ์ด๊ณ ๊ธฐ๋ณธ์ด ๋๋ ๋ฐฉ์
๊ฐํธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ํน์ ์์์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ ๋ฐฉ์์
๋๋ค. ๋ณดํต ํ์ฌ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณดํธ๋ ์์์ ์ ๊ณตํ๊ธฐ ์ํ ์ธ์ฆ์ ์ฌ์ฉ๋ฉ๋๋ค.
โข
๋ฆฌ์์ค ์ ๊ทผ์ ์ํด ์ธ๊ฐ ์๋ฒ(Authorization Server)์์ ๋ฐ์ ๊ถํ ์ฝ๋๋ก ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๋ ๋ฐฉ์
โข
Refresh Token์ ์ฌ์ฉ์ด ๊ฐ๋ฅ
โข
๋ค๋ฅธ ์ธ์ฆ ์ ์ฐจ์ ๋นํด ๋ณด์์ฑ์ด ๋๊ธฐ์ ์ฃผ๋ก ์ฌ์ฉ
Implicit Grant (์๋ฌต์ ์น์ธ)
์๊ฒฉ์ฆ๋ช
์ ์์ ํ๊ฒ ์ ์ฅํ๊ธฐ ํ๋ ํด๋ผ์ด์ธํธ(ex: JavaScript๋ฑ์ ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ์ฌ์ฉํ ๋ธ๋ผ์ฐ์ )์๊ฒ ์ต์ ํ๋ ๋ฐฉ์
์์์ ์น์ธ ๋ฐฉ์์์๋ ๊ถํ ๋ถ์ฌ ์น์ธ ์ฝ๋ ์์ด ๋ฐ๋ก Access Token์ด ๋ฐ๊ธ ๋ฉ๋๋ค. Access Token์ด ๋ฐ๋ก ์ ๋ฌ๋๋ฏ๋ก ๋ง๋ฃ๊ธฐ๊ฐ์ ์งง๊ฒ ์ค์ ํ์ฌ ๋์ถ์ ์ํ์ ์ค์ผ ํ์๊ฐ ์์ต๋๋ค.
โข
๊ถํ ๋ถ์ฌ ์ฝ๋ ์น์ธ ํ์
(Authorization Code Grant)์ ๋ค๋ฅด๊ฒ ๊ถํ ์ฝ๋ ๊ตํ ๋จ๊ณ๊ฐ ์์
โข
์ก์ธ์ค ํ ํฐ์ ์ฆ์ ๋ฐํ๋ฐ์ ์ด๋ฅผ ์ธ์ฆ์ ์ด์ฉํ๋ ๋ฐฉ์
Resource Owner Password Credentials Grant (๋ฆฌ์์ค ์์ ์ ์ํธ ์๊ฒฉ ์น์ธ)
๊ฐ๋จํ๊ฒ, username, password๋ก Access Token์ ๋ฐ๋ ๋ฐฉ์
ํด๋ผ์ด์ธํธ๊ฐ ํ์ฌ์ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ผ ๊ฒฝ์ฐ์๋ ์ด ๋ฐฉ์์ ์ ์ฉํ๋ฉด ์๋ฉ๋๋ค. ์์ ์ ์๋น์ค์์ ์ ๊ณตํ๋ ์ดํ๋ฆฌ์ผ์ด์
์ผ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋๋ ์ธ์ฆ ๋ฐฉ์์
๋๋ค. Refresh Token์ ์ฌ์ฉ๋ ๊ฐ๋ฅํฉ๋๋ค.
โข
Client๊ฐ ์ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ํ ํฐ์ ๋ํ ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช
์ ๊ตํํ๋ ๋ฐฉ์
โข
Resource Owner์์ ID, Password๋ฅผ ์ ๋ฌ ๋ฐ์ Resource Server์ ์ธ์ฆํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ขฐํ ์ ์๋ Client์ ํํด์๋ง ์ฌ์ฉํ๋ ๊ฒ ์ถ์ฒ
Client Credentials Grant (ํด๋ผ์ด์ธํธ ์๊ฒฉ ์น์ธ)
ํด๋ผ์ด์ธํธ์ ์๊ฒฉ์ฆ๋ช
๋ง์ผ๋ก Access Token์ ํ๋ํ๋ ๋ฐฉ์
OAuth2์ ๊ถํ ๋ถ์ฌ ๋ฐฉ์ ์ค ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ ์์ ์ด ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ํน์ ๊ถํ ์๋ฒ์ ํด๋น ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ ํ๋ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ์ด ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฉ๋๋ค.
โข
Client๊ฐ ์ปจํ
์คํธ ์ธ๋ถ์์ ์์ธ์ค ํ ํฐ์ ์ป์ด ํน์ ๋ฆฌ์์ค์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์
OAuth ์๋น์ค ๋ฑ๋ก
์๋น์ค๋ฅผ ๋ฑ๋กํ๋ฉด ๋ฐ๊ฒ๋๋ ํ์ ์์
โข
Client ID
โฆ
์ดํ๋ฆฌ์ผ์ด์
(์๋น์ค)์ ์๋ณํ๋ ์๋ณ์ID๋ฅผ ์๋ฏธํ๋ค.
โฆ
๋ค์ํ ์๋น์ค๊ฐ ์กด์ฌํ๋๋ฐ, Resource Server ์
์ฅ์์ ์ด๋ค ์๋น์ค์๊ฒ ์ ๊ณตํ ๊ฒ ์ธ์ง ๊ตฌ๋ถํ๋ ID๋ฅผ ์๋ฏธํ๋ค.
โข
Client Secret
โฆ
Client ID์ ๋ํ ๋น๋ฐ๋ฒํธ๋ก ์ธ๋ถ์ ๋
ธ์ถ๋๋ฉด ์๋๋ค.
โฆ
ID์ PASSWORD๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
โข
Authorized redirect URIs
โฆ
Resource Server๋ง ๊ฐ๋ ์ ๋ณด๋ก, client์ ๊ถํ์ ๋ถ์ฌํ๋ ๊ณผ์ ์์ ๋์ค์ Authorized code๋ฅผ ์ ๋ฌํ๋ ํต๋ก๋ค.
โฆ
๋์ค์ client <-> Resource Server ์ ํจ์ฑ ๊ฒ์ฌ์์ ์ด redirect URIs๋ ์ฒดํฌ๋๋ฉฐ ํด๋น์ฃผ์๊ฐ ์๋ ๊ฒฝ์ฐ Resource Server๋ ํด๋น client๊ฐ ์๋๋ผ๊ณ ํ๋จํ๋ค.
โฆ
์ฆ, ์๋ฅผ๋ค์ด ๋ค์ด๋ฒ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ฝ๋ฐฑํ ์ฃผ์๋ฅผ ์ ๋ ๊ณณ์ด๋ค.