์์ฆ ์์ค์ SW ๋ถํธ์บ ํ๊ฐ ๋ง๋ค.
๊ทธ ์ค, ์น ๊ฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ณณ์ด ๋ง์๋ฐ OAuth๊ธฐ๋ฅ์ ๊ฒฝํํด๋ณธ ์น ๊ฐ๋ฐ์ ์ง๋ง์๋ค ๋ํ ๋ง๋ค. ํ์ง๋ง OAuth๋ผ๊ณ ํ์๋, ์์ ๋ก๊ทธ์ธ ์ ๋๋ก ์๊ณ ๊ทธ์น๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ ๋ ์ญ์ ๊ทธ๋ ๊ธฐ์ ์ ๋๋ก๋ ๊ฐ๋ ๊ณผ OAuth1๊ณผ OAuth2์ ์ฐจ์ด๋ฅผ ์์๋ณด๋๋ก ํ์
์ ํ๋ฆฌ์ผ์ด์
์ธ์ฆ์ ์ํ ์ ๊ทผ ๊ดํ ๊ฐ๋ฐฉํ ํ์ค ํ๋กํ ์ฝ
์์ฆ ์ ํ๋ฆฌ์ผ์ด์
๋ค์ ์ด์ฉํ๋ค๋ณด๋ฉด ์ ์ฌ์ง ์ฒ๋ผ ์ง์ ๊ณ์ ์ ์์ฑํ๊ฑฐ๋, ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ณ์ ์ ๊ณต์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ ๋ชจ์ต์ ์์ฃผ ๋ณผ ์ ์๋ค. ์ฝ๊ฒ ๋งํด ํ ๊ณ์ ์ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ํ๋๊ฒ์ด OAuth์ด๋ค.
๊ทธ๋ผ OAuth์ ์ ํํ ๊ฐ๋
๊ณผ ํ๋ก์ธ์ค๋ ๋ญ๊น?
โ ๊ฐ๋
Open Authorization
์ ์ฝ์๋ก ์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ , ๋ค๋ฅธ ์น์ฌ์ํธ ์์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ณตํต์ ์ธ ์๋จ์ผ๋ก ์ฌ์ฉ๋๋, ์ ๊ทผ ์์์ ์ํ ๊ฐ๋ฐฉํ ํ์ค์ด๋ค.
OAuth๊ฐ ์ฌ์ฉ๋๊ธฐ ์ ์๋ ์ธ์ฆ๋ฐฉ์์ ํ์ค์ด ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๊ธฐ๋ณธ์ธ์ฆ์ธ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ ๋ณด์์ ์ทจ์ฝํ ๊ตฌ์กฐ์ผ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋ง๋ค.
๊ธฐ๋ณธ ์ธ์ฆ์ด ์๋ ๊ฒฝ์ฐ๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ฐ์ ๊ฐ๋ฐํ ํ์ฌ์ ๋ฐฉ๋ฒ๋๋ก ์ฌ์ฉ์๋ฅผ ํ์ธํ์๋ค.
OAuth๋ ์ด๋ฐ ์ ๊ฐ๊ฐ ์ธ์ฆ๋ฐฉ์์ ํ์คํํ ์ธ์ฆ๋ฐฉ์์ด๋ค. OAuth๋ฅผ ์ด์ฉํ๋ฉด ์ด ์ธ์ฆ์ ๊ณต์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ผ๋ฆฌ ๋ณ๋์ ์ธ์ฆ์ด ํ์์๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ์ธ์ฆ์ผ๋ก ํตํฉ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ฉ์ด | ์ค๋ช |
---|---|
์ฌ์ฉ์(user) | ์๋น์ค ์ ๊ณต์์ ์๋น์๋ฅผ ์ฌ์ฉํ๋ ๊ณ์ ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ธ |
์๋น์(consumer) | Open API๋ก ๊ฐ๋ฐ๋ OAuth๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ์ ๊ณต์์๊ฒ ์ ๊ทผํ๋ ์ ํ๋ฆฌ์ผ์ด์ |
์๋น์ค ์ ๊ณต์(service provider) | OAuth๋ฅผ ํตํด ์ ๊ทผ์ ์ง์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ |
์๋น์ ๋น๋ฐ๋ฒํธ(consumer secret) | ์๋น์ค ์ ๊ณต์์๊ฒ ์๋น์์์ ์ธ์ฆํ๊ธฐ ์ํ ํค |
์์ฒญ ํ ํฐ(request token) | ์๋น์๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ถํ์ ์ธ์ฆ๋ฐ๊ธฐ ์ํด ํ์ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ํ ํฐ |
์ ๊ทผ ํ ํฐ(access token) | ์ธ์ฆ ํ ์ฌ์ฉ์๊ฐ ์๋น์ค ์ ๊ณต์๊ฐ ์๋ ์๋น์๋ฅผ ํตํด์ ์์ ์ ๊ทผ์ ํ๋ฝํ๋ ํค๋ฅผ ๊ฐ๊ณ ์๋ ํ ํฐ |
์ฌ์ง ์ถ์ฒ: showbugs.github.io
1. ์๋น์๊ฐ ์๋น์ค ์ ๊ณต์์๊ฒ ์์ฒญ ํ ํฐ์ ์์ฒญํ๋ค.
2. ์๋น์ค ์ ๊ณต์๊ฐ ์๋น์์๊ฒ ์์ฒญ ํ ํฐ์ ๋ฐ๊ธํด์ค๋ค.
3. ์๋น์๊ฐ ์ฌ์ฉ์๋ฅผ ์๋น์ค ์ ๊ณต์๋ก ์ด๋์ํจ๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์ ์ธ์ฆ์ด ์ํ
4. ์๋น์ค ์ ๊ณต์๊ฐ ์ฌ์ฉ์๋ฅผ ์๋น์๋ก ์ด๋์ํจ๋ค.
5. ์๋น์๊ฐ ์ ๊ทผ ํ ํฐ์ ์์ฒญํ๋ค.
6. ์ ๊ณต์๊ฐ ์ ๊ทผ ํ ํฐ์ ๋ฐํํ๋ค.
7. ๋ฐ๊ทผ๋ ์ ๊ทผ ํ ํฐ์ ์ด์ฉํ์ฌ ์๋น์๊ฐ ์ฌ์ฉ์ ์ ๋ณด์ ์ ๊ทผํ๋ค.
์ฆ OAuth๋ ์ด ๊ณ ๊ฐ, ๊ณ ๊ฐ์ด ์ด์ฉํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์ , ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๊ฒ 3๊ฐ๊ฐ ์ํธ์์ฉํ๋ ํํ์ด๋ค.
๊ตฌํ์ด ๋ณต์กํจ,
HMAC(keyed-hash message authentication code, hash-based message authentication code)๋ฅผ ํตํ ์ํธํ๋ฅผ ํ๋ ๋ฒ๊ฑฐ๋ก์,
์ธ์ฆํ ํฐ์ด ๋ง๋ฃ๊ฐ ๋์ง ์์ ํ ํฐ์ ๋ง๋ฃํ๋ ค๋ฉด ์ ๊ณต์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ๊ฟ์ผ ํจ
๋ฑ์ผ๋ก OAuth 2.0์ด ๋ฑ์ฅํ์์ต๋๋ค.
์ฉ์ด | ์ค๋ช |
---|---|
Resource owner | ์ฌ์ฉ์ |
Client | Resource Server์์ ์ ๊ณตํ๋ ์์์ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ |
Resource Server(API Server) | ์์์ ํธ์คํ ํ๋ ์๋ฒ |
Authorization Server | ์ฌ์ฉ์์ ๋์๋ฅผ ๋ฐ์์ ๊ถํ์ ๋ถ์ฌํ๋ ์๋ฒ, ์ผ๋ฐ์ ์ผ๋ก Resource Server์ ๊ฐ์ URL ํ์์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ |
์ฌ์ง ์ถ์ฒ: ํ์ด์ฝ ๊ฐ๋ฐ์์ผํฐ OAuth 2.0 ํ๋ก์ธ์ค
1-5 ๋จ๊ณ๋ Authorization Code ๋ฐ๊ธ ์์ฒญ URL์ ํตํด ์งํ
7-8 ๋จ๊ณ๋ ์๋น์ค์์ callbackURL์ ํตํด ์ ๋ฌ๋ฐ์ Authorization Code๋ฅผ ์ฌ์ฉํ์ฌ Access Token์ ์์ฒญ API๋ฅผ ํตํด ์งํ
8๋จ๊ณ์์ ๋ฐ๊ธ๋ฐ์ Access Token์ ์๋น์ค์ ์์ฒด์ ์ผ๋ก ์ ์ฅ, ๊ด๋ฆฌ
10-11๋จ๊ณ ์ฌ์ฉ์์ ์๋น์ค ์์ฒญ์ ํ์์ ๋ณด๊ฐ ํ์ํ๋ค๋ฉด AccessToken์ ํตํด API๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
response-type=code
๋ผ๊ณ ๋๊นresponse_type=token
๋ผ๊ณ ๋๊นgrant_type=credentails
๋ผ๊ณ ๋๊นgrant_type=client_credentails
๋ผ๊ณ ๋๊น์์ ๋งํ 4๊ฐ์ง ๋ฐฉ์ ๋ชจ๋ ์ ์์ ์ธ ์ธ์ฆ์ ๋ง์น๋ฉด Access Token์ด ๋ฐ๊ธ๋ฉ๋๋ค. ์ด Token์ ๋ณดํธ๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ๊ถํ ํ์ธ์ฉ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ณ์ ID์ PW ๋ฑ ๊ณ์ ์ธ์ฆ์ ํ์ํ ํํ๋ค์ Token์ผ๋ก ํํํจ์ผ๋ก์จ, ๋ฆฌ์์ค ์๋ฒ๋ ์ฌ๋ฌ ๊ฐ์ง ์ธ์ฆ ๋ฐฉ์์ ๊ฐ๊ฐ ๋์ ํ์ง ์์๋ ๊ถํ์ ํ์ธ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
ํ๋ฒ ๋ฐ๊ธ๋ฐ์ Access Token ์ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ด ์ ํ๋์ด ์์ต๋๋ค. Access Token์ด ๋ง๋ฃ๋๋ฉด, ์๋ก์ด Access Token์ ์ป์ด์ผ ํ๋๋ฐ ๊ทธ๋ Refresh Token ์ด ํ์ฉ๋ฉ๋๋ค.
๊ถํ ์๋ฒ๊ฐ Access Token ์ ๋ฐ๊ธํด์ฃผ๋ ์์ ์ Refresh Token ๋ ํจ๊ป ๋ฐ๊ธํ์ฌ ์ฃผ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ์ ์ฐจ ์์ด Refresh Token์ ๋ฏธ๋ฆฌ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋จ ๊ถํ ์๋ฒ์์๋ง ํ์ฉ๋๋ฉฐ ๋ฆฌ์์ค ์๋ฒ์๋ ์ ์ก๋์ง ์์ต๋๋ค.
์๊ฐ์ด ํ๋ฅธ ํ Access Token์ด ๋ง๋ฃ๋๋ฉด, ๋ฆฌ์์ค ์๋ฒ๋ ์ดํ ์์ฒญ๋ค์ ๋ํด ์ค๋ฅ๋ฅผ ์๋ตํ๊ฒ ๋ฉ๋๋ค. Client๋, ๋ฐ์ ๋์๋ Refresh Token์ ๊ถํ ์๋ฒ์ ๋ณด๋ด์ด ์๋ก์ด Access Token์ ์์ฒญํฉ๋๋ค. ๊ฐฑ์ ์์ฒญ์ ๋ฐ์ ๊ถํ ์๋ฒ๋ Refresh Token์ ์ ํจ์ฑ์ ๊ฒ์ฆํ ํ, ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธํด์ค๋๋ค. ์ด ๊ณผ์ ์์ ์ต์ ์ ๋ฐ๋ผ Refresh Token ๋ ์๋กญ๊ฒ ๋ฐ๊ธ ๋ ์ ์์ต๋๋ค