[Web] OAuth์ ๋ฑ์ฅ ๋ฐ OAuth 2.0 ๊ฐ๋ ์ ๋ํด์ ์ฝ๊ฒ ์์๋ด์.
๐ ๋ค์ด๊ฐ๋ฉฐ
์ต๊ทผ ๋ค์ํ ์น ์๋น์ค๋ฅผ ์ ํด๋ณด๋ฉด ๊ฐํธํ SNS ๋ก๊ทธ์ธ์ผ๋ก ์ฝ๊ฒ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
์ด๋ฐ ๊ฐํธํ SNS ๋ก๊ทธ์ธ์ด ๋ฐ๋ก OAuth2.0 ํ๋กํ ์ฝ์ ํตํด ์งํ๋ฉ๋๋ค.
๊ทธ๋ผ, OAuth๊ฐ ์ด๋ค ๋ฐฐ๊ฒฝ์์ ๋ฑ์ฅํ์๊ณ , ํ์ฌ๋ ์ด๋ป๊ฒ ํ์คํ๋์ด OAuth2.0์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋์ง, ๊ทธ ํ๋ฆ์ ๋ํ ๊ฐ๋ ์ ํจ๊ป ์์๋ณด๊ฒ ์ต๋๋ค.
๐ง OAuth ๋ฑ์ฅ๋ฐฐ๊ฒฝ
์น ์๋น์ค์ ๋ค์์ฑ์ด ์ฆ๊ฐํ๋ฉด์, ์์ ํ๊ฒ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ์์ฑ์ด ์๊ฒผ์ต๋๋ค.
์ด๋ก ์ธํด OAuth(Open Authorization)๋ผ๋ ๊ฐ๋ ์ด ํ์ํ๊ฒ ๋์์ต๋๋ค.
์ด๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด์ ํ ๊ฐ์ง ์๋ฅผ ๋ค์ด ๋ณผ๊ฒ์.
์ฐ๋ฆฌ์ ์๋น์ค๊ฐ ์ฌ์ฉ์์๊ฒ ์ฌ์ฉ์์ ๊ตฌ๊ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ์ ๋ํ ์์ด๋์ ํจ์ค์๋๋ฅผ ์ฐ๋ฆฌ ์๋น์ค(Client)์๊ฒ ์ ๊ณตํ๊ณ , ๊ทธ๋ผ ์ฐ๋ฆฌ ์๋น์ค(Client)์์ ๊ตฌ๊ธ์ ๋ก๊ทธ์ธ์ ํ์ฌ ํด๋น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ๋ฐฉ์์ ์๊ฐํด ๋ณผ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์๋ ๋ณด์ ๋ฌธ์ ์ ์์ด์ ๋งค์ฐ ์ทจ์ฝํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ฅ์์๋ ์ 3์์๊ฒ ์์ ์ SNS ์ ๋ณด๋ฅผ ๋งก๊ธฐ๊ฒ ๋๋ฉฐ ๋งค์ฐ ๋ถ์ํ๊ฒ ์ฃ .
๋ํ, ์ฐ๋ฆฌ ์๋น์ค๊ฐ ํด์ปค์๊ฒ DB๊ฐ ํ์ทจ๋๋ค๋ฉด SNS ์ ๋ณด์ ์ ์ถ๊น์ง ๋ฐ์ํฉ๋๋ค.
์ด์ ๋ํด์ ๊ถํ์ ํด์ ํ๋ ค๋ฉด ํด๋น SNS์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ๋ฐ์ ์กด์ฌํ์ง ์์ต๋๋ค.
๊ทธ๋์ OAuth ํ๋กํ ์ฝ์ด ๋ฑ์ฅํ๊ธฐ ์ด์ ์๋ ๊ฐ SNS ํ์ฌ๋ง๋ค ๊ฐ๊ฐ ๋ค๋ฅธ ์ธ์ฆ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋๋ก ํ์ต๋๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํ์คํ๋์ง ์์ ์ ์ฐจ๋ ๊ฐ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ฉฐ ๋ง์ ์ด๋ ค์์ ๊ฒช๊ฒ ํ์ต๋๋ค.
๊ฐ SNS ๋ง๋ค ๋ค๋ฅธ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ๊ฒฝํ์ด ์ข์ง ์์๊ณ , ์ ์ง๋ณด์์๋ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค.
์์ ๊ฐ์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ์ธ์ฆ์ ์ํ ๊ฐ๋ฐฉํ ํ๋กํ ์ฝ๋ก OAuth๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
๐ OAuth2.0์ด๋?
OAuth2.0์ ์ธ์ฆ์ ์ํ ๊ฐ๋ฐฉํ ํ์ค ํ๋กํ ์ฝ์ ๋๋ค.
์ฌ์ฉ์๊ฐ ์๋น์ค ์ ๊ณต์์๊ฒ ํน์ ์ฑ์ด ์ฌ์ฉ์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋์ ์ฌ์ฉ์๋ ์์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ณต์ ํ์ง ์๊ณ ๋ ์ 3์ ์ ํ๋ฆฌ์ผ์ด์ (์ฐ๋ฆฌ ์๋น์ค)์ ์์ ์ ์ ๋ณด์ ๋ํ ์ ํ๋ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค.
๊ทธ๋ผ, OAuth1.0์ ๋ญ๊น์โ
OAuth1.0์ ์กด์ฌํ๋ ๋ณต์ก์ฑ๊ณผ ํ์คํ ๋ฌธ์ ๋ก ์ ๊ทผํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์กด์ฌํ์ต๋๋ค.
๋์ฑ ๋ณด์์ ๊ฐํํ๊ณ ํ์คํ๋ฅผ ์ํด 2.0์ด ๋ฑ์ฅํ์ต๋๋ค.
์ธ์ฆ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ ํ์ฅํ๋ฉด์ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ์ต๋๋ค.
OAuth2.0 ์ฃผ์ ์ฉ์ด
๋ ๊น์ด ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ฃผ์ ์ฉ์ด๋ถํฐ ์ง๊ณ ๊ฐ๊ฒ ์ต๋๋ค.
- Authentication: ์ธ์ฆ โก๏ธ ์ ๊ทผ ์๊ฒฉ์ด ์๋์ง ๊ฒ์ฆํ๋ ๋จ๊ณ
- Authorization: ์ธ๊ฐ โก๏ธ ์์์ ์ ๊ทผํ ๊ถํ์ ๋ถ์ฌ
- Access Token: ์ฌ์ฉ์๊ฐ ํด๋น ํ ํฐ์ ๊ฐ์ง๊ณ SNS ์๋ฒ์๊ฒ ์ ๋ณด๋ฅผ ํ๋ํ ๋ ์ฌ์ฉ๋๋ ํ ํฐ์ ๋๋ค. ๋ง๋ฃ ๊ธฐ๊ฐ์ด ์๋์ ์ผ๋ก ์งง์ต๋๋ค.
- Refresh Token: Access Token์ด ๋ง๋ฃ๋ ๋ ์ด๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ ํฐ์ ๋๋ค. ๊ทธ๋์ ์๋์ ์ผ๋ก Access Token ๋ณด๋ค ๊ธด ๋ง๋ฃ ๊ธฐ๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก ๋ฐ ์ฌ์ฉ์ ํ์ํ ์ฃผ์ ์ฉ์ด
redirect_URI
- ๊ถํ ์๋ฒ๊ฐ ์์ฒญ์ ๋ํ ์๋ต์ ๋ณด๋ผ url์ ์๋ฏธํฉ๋๋ค.
- ์ธ์ฆ์ด ์ฑ๊ณตํ๋ฉด ์ฌ์ฉ์๋ฅผ ์ด URI๋ก ๋ฆฌ๋๋ ์ ์ํต๋๋ค.
- ๋ณด์์ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก https๋ฅผ ์ฌ์ฉํ์ง๋ง, ๊ฐ๋ฐํ๊ฒฝ(localhost)์ http๊ฐ ํ์ฉ๋ฉ๋๋ค.
client_id ๋ฐ client_secret
- ํด๋ผ์ด์ธํธ ์๊ฒฉ ์ฆ๋ช ์ ๋ํ๋ ๋๋ค.
- ๊ถํ ์๋ฒ๋ ์ด ์ ๋ณด๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํฉ๋๋ค.
- id๋ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ๋ ์ ๋ณด, secret์ ํด๋ผ์ด์ธํธ์ ๋น๋ฐ๋ฒํธ๋ก ๋ณผ ์ ์์ต๋๋ค.
scope
- ์ ๊ทผ ๊ถํ์ ๋ฒ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ์ด๋ฉ์ผ, ์ด๋ฆ, ์์ด๋, ์ฃผ์ ๋ฑ ๋ค์ํ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
OAuth2.0 ์ฃผ์ ๊ตฌ์ฑ์์
OAuth2.0 ํ๋กํ ์ฝ์ ํฌ๊ฒ 4๊ฐ์ง์ ์ญํ ์ ๊ฐ์ง ๊ตฌ์ฑ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- Resource Owner: ์น ์๋น์ค๋ฅผ ์ด์ฉํ๋ ค๋ ์ฌ์ฉ์ ๋๋ ๊ฐ์ธ ์ ๋ณด ์์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- Client: ์์ ๋๋ ๊ฐ์ธ์ด ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. Resource Server์ ์์์ ์ฌ์ฉํ๊ณ ์ ํ๋ ์๋น์ค๋ฅผ ์๋ฏธํ๋ฉฐ, ํ๋ก ํธ์๋๋ ๋ฐฑ์๋์ ๊ฐ์ ๊ตฌ๋ถ ์์ด ์๋น์ค ๊ทธ ์์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค.
- Resource Server: ์ฌ์ฉ์์ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๊ณ ์๋ ์๋ฒ๋ฅผ ์๋ฏธํฉ๋๋ค.
- Authorization Server: ๊ถํ์ ๋ถ์ฌํด์ฃผ๋ ์๋ฒ๋ก, Client์ ์ ๊ทผ ์๊ฒฉ ํ์ธํ๊ณ Access Token ๋ฐ๊ธ ๋ฐ Authorization Code ๋ฐ๊ธํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
์ฌ๊ธฐ์ Resource Server์ Authorization Server๋ SNS ์๋น์ค ๋ด๋ถ์์ ๊ตฌํ๋๋ ์ญํ ์ ๋๋ค.
๐ OAuth2.0 ์ธ์ฆ ํ๋ฆ
๊ทธ๋ผ ์์์ ์์๋ณธ ์ฉ์ด๋ค์ ํ ๋๋ก ์ด๋ป๊ฒ ์ธ์ฆ์ด ์งํ๋๋์ง ์์๋ณผ๊น์?
์ ๊ทธ๋ฆผ์ ํ ๋๋ก ๋ก๊ทธ์ธ ๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
๋ก๊ทธ์ธ ์์ฒญ (1 ~ 2 ๊ณผ์ )
์ฌ์ฉ์(Resource Owner)๊ฐ SNS ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ก๊ทธ์ธ์ ์์ฒญํฉ๋๋ค.
์ดํ Client๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ Authorization Server๋ก ์ด๋์ํต๋๋ค.
์ด๋ ํ์ํ ์ ๋ณด๋ค์ด ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ํฌํจ๋ฉ๋๋ค.
๋ก๊ทธ์ธ ํ์ด์ง ์ ๊ณต ๋ฐ ID/PW ์ ๊ณต (3 ~ 4 ๊ณผ์ )
์ฌ์ฉ์(Resource Owner)๋ ์ ๊ณต๋ ๋ก๊ทธ์ธ ํ์ด์ง์์ ์์ ์ ID์ PW๋ฅผ ์ ๋ ฅํ์ฌ ์ธ์ฆ์ ์งํํฉ๋๋ค.
Authorization Code ๋ฐ๊ธ ๋ฐ Redirect URI๋ก ๋ฆฌ๋๋ ํธ (5 ~ 6 ๊ณผ์ )
์ธ์ฆ์ด ์ฑ๊ณตํ๋ฉด, Authorization Server๋ ์ฌ์ฉ์๋ฅผ Redirect URI๋ก ๋ฆฌ๋๋ ์ ์ํต๋๋ค.
์ด๋ URL์๋ Authorization Code๊ฐ ํฌํจ๋ฉ๋๋ค.
์ด ์ฝ๋๋ Client๊ฐ Access Token์ ๋ฐ๊ธฐ ์ํ ์ผํ์ฑ ์ฝ๋์ ๋๋ค.
Authorization Code์ Access Token ๊ตํ (7 ~ 8 ๊ณผ์ )
Client๋ Authorization Code๋ฅผ Authorization Server์ ์ ๋ฌํ๊ณ , Access Token์ ๋ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Client๋ ์ด ํ ํฐ์ ํ์ฉํด์, ์ดํ ์ฌ์ฉ์(Resource Owner)์ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
๋ก๊ทธ์ธ ์ฑ๊ณต (9 ๊ณผ์ )
์ด ๊ณผ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ง์น ํ์๋ Client๊ฐ ์ฌ์ฉ์(Resource Owner)์๊ฒ ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ์์ ์๋ฆฝ๋๋ค.
Access Token์ผ๋ก ์๋น์ค ์์ฒญ ๋ฐ ์ ๊ทผ (10 ~ 13 ๊ณผ์ )
์ฌ์ฉ์(Resource Owner)๊ฐ Resource Server์ ์ ๊ทผ์ ์์ฒญํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ ์ฅํด ๋ Access Token์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ณ , ์ฌ์ฉ์(Resource Owner)์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
OAuth์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ๋ถํฐ OAuth2.0์ ๊ฐ๋ , ํ๋ฆ๊น์ง ์์๋ดค์ต๋๋ค.
SNS ๋ก๊ทธ์ธ์ด ํ์์ธ ์๋์ฌ์ OAuth2.0์ ํตํ ๊ฐ๋ฐ์ ํ๊ธฐ ์ํด์ ๊ฐ๋ ์์ง๊ฐ ํ์๊ฐ ๋ ๊ฒ ๊ฐ๋ค์.
๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
ํน์ ํ๋ฆฐ ๋ด์ฉ์ด๋ ๋ณด์ถฉํด์ผ ํ ๋ด์ฉ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์ธ์ :)
์ฐธ๊ณ ๋ฌธํ: