[Network] OAuth 2.0์ด๋?
๐ย OAuth 2.0์ด๋?
OAuth 2.0
์ ์ฌ์ฉ์๊ฐ ์์ ์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ third-party ์น ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ถ์ฌํ ์ ์๋๋ก ์ค๊ณ๋ ๊ถํ ๋ถ์ฌ ํ๋ ์์ํฌ์ด๋ค. ์ฌ์ฉ์๋ OAuth 2.0์ ํตํด ์์ด๋, ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๊ณต์ ํ์ง ์์ผ๋ฉด์ third-party ์น ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ํน์ ์์
์ ์ํํ ์ ์๋๋ก ํ์ฉํ ์ ์๋ค.
ํน์ ์๋น์ค์ ๋ก๊ทธ์ธ ์ ์นด์นด์ค, ๊ตฌ๊ธ๊ณผ ๊ฐ์ ๊ณ์ ์ ํตํด ๋ก๊ทธ์ธํ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ฐฉ์์ด OAuth 2.0์ด ์ฌ์ฉ๋ ์์์ด๋ค.
๐ย ์ฉ์ด ์ ๋ฆฌ
OAuth 2.0์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Resource Owner: ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์, OAuth 2.0์ด ์ฌ์ฉ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ฉํ๋ ค๋ ์ฌ์ฉ์
- Client: Resource Owner์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ third party ์ ํ๋ฆฌ์ผ์ด์ , Authorization/Resource Server ์ ์ฅ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ Client์ด๋ค.
- Authorization Server: ํด๋ผ์ด์ธํธ๋ฅผ ์ธ์ฆ ๋ฐ ๊ถํ์ ๋ถ์ฌ(์ธ๊ฐ)ํ๊ณ ์์ธ์ค ํ ํฐ์ ๋ฐ๊ธํ๋ ์๋ฒ
- Resource Server: ํ ํฐ์ ํตํด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ฒ์ฆ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ์๋ฒ
OAuth 2.0์์ ์ฌ์ฉ๋๋ ์ฃผ์ ์ฉ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Authentication: ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค.
- Authorization: ์ฌ์ฉ์๊ฐ ํน์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ด ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค.
- Access Token: ์ฌ์ฉ์์ ๊ถํ์ ๋ํ๋ด๋ ํ ํฐ์ด๋ค. ๋ง๋ฃ ๊ธฐํ์ด ์กด์ฌํ๋ค.
- Refresh Token: ๋ง๋ฃ๋ Access Token์ ๊ฐฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ ํฐ์ด๋ค.
๐ย ๋์ ๋ฐฉ์
OAuth 2.0์์ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ์ํ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ผ๋, ๊ทธ ์ค Authorization Code Grant
์ ๋ํ์ฌ ์ค๋ช
ํ๋ ค๊ณ ํ๋ค. ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด์.
1. Resource Owner โ Client: ๋ก๊ทธ์ธ ์์ฒญ
์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ (Client)์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ธ๋ค.
2. Client โ Authorization Server: ๋ก๊ทธ์ธ ์์ฒญ
Client๊ฐ Authorization Server์๊ฒ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ์์ฒญํ๋ค. ์์ฒญ ์ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
- client _id: Client๋ฅผ ์๋ณํ๋ ๊ณ ์ ํ ID
- redirect_uri: ์ธ์ฆ ํ ์ฌ์ฉ์๋ฅผ ๋ฆฌ๋๋ ์ ํ URI
- response_type:
code
๋ก ์ค์ ํด์ผ ํ๋ฉฐ, ์ธ์ฆ์ด ์ฑ๊ณตํ๋ฉดAuthorization Code
๋ฅผ ๋ฐ๋๋ค. - scope: ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์ด๋ค ์์ ์ ์ํํ ์ ์๋์ง ์ ์๋ ๋ฌธ์์ด
3. Authorization Server โ Resource Owner: ๋ก๊ทธ์ธ ํ์ด์ง ์ ๊ณต
์ ๊ณต๋ ํ์ด์ง์์ ์ฌ์ฉ์๋ ์์ ์ ์๊ฒฉ ์ฆ๋ช (์์ด๋, ๋น๋ฐ๋ฒํธ ๋ฑ)์ ์ ๋ ฅํ๋ค.
4. Resource Owner โ Authorization Server: ID/PW ์ ๊ณต
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๊ฒฉ ์ฆ๋ช ์ ํตํด ์ธ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
5. Authorization Server โ Resource Owner: Authorization Code ๋ฐ๊ธ
์ฌ์ฉ์ ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด Authorization Server๋ ์ฌ์ฉ์์๊ฒ Authorization Code๋ฅผ ๋ฐ๊ธํ๋ค. ์ด ์ฝ๋๋ Client๊ฐ Access Token์ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ ์์ ์ฝ๋์ด๋ค.
6. Resource Owner โ Client: Redirect URI๋ก ๋ฆฌ๋๋ ์
Authorization Server๋ ์ฌ์ฉ์๋ฅผ Redirect URI๋ก ๋ฆฌ๋์น์ ํ๋ฉฐ, ์ด ๋ URI์ Authorization Code๋ฅผ ํฌํจ์ํจ๋ค.
7. Client โ Authorization Server: Access Token ์์ฒญ
Client๊ฐ Authorization Code๋ฅผ ํตํด Access Token์ ์์ฒญํ๋ค. ์์ฒญ์ ํฌํจ๋์ด์ผ ํ๋ ์ ๋ณด๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- grant_type:
authorization_code
๋ก ์ค์ ๋์ด์ผ ํ๋ค. - code: ๋ฐ๊ธ๋ Authorization Code๋ก ์ค์ ํ๋ค.
- redirect_uri
- client_id
- client_secret
8. Authorization Server โ Client: Access Token ๋ฐ๊ธ
Authorization Server๊ฐ ์์ฒญ์ ๊ฒ์ฆํ ํ Client์๊ฒ Access Token์ ๋ฐ๊ธํ๋ค. ์ด ์์ ์ Refresh Token๋ ๊ฐ์ด ๋ฐ๊ธ๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
9. Client โ Resource Owner: ๋ก๊ทธ์ธ ์ฑ๊ณต ์๋ฆผ
Client๋ ๋ฐ๊ธ๋ Access Token์ DB ๋ฑ์ ์ ์ฅํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ก๊ทธ์ธ์ด ์ฑ๊ณต๋์์์ ์๋ฆฐ๋ค.
10. Resource Owner โ Client: ์๋น์ค ์์ฒญ
์ฌ์ฉ์๊ฐ Client๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ค.
11. Client โ Resource Server: Access Token์ผ๋ก API ํธ์ถ
Client๋ Resource Server์ API ํธ์ถ ์ Access Token์ ํจ๊ป ์ ์กํ์ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ์ํํ๋ค.
12. Resource Server โ Client: Access Token ๊ฒ์ฆ ๋ฐ ์๋น์ค ์ ๊ณต ์น์ธ
Resource Server๋ ๋ฐ์ Access Token์ด ๋ง๋ฃ๋์๋์ง, scope์ ๊ถํ์ด ์ ์ ํ์ง ํ์ธํ๋ค. ์ ํจ์ฑ ๊ฒ์ฆ์ด ์๋ฃ๋๋ฉด ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ ์ค๋น๋ฅผ ํ๋ค.
13. Resource Server โ Client: ๋ฆฌ์์ค ์ ๊ณต
๊ฒ์ฆ์ด ์๋ฃ๋๋ฉด Resource Server๋ ์์ฒญ๋ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ค.
๐ย ์ฅ์
- ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช ์ ์ง์ ๊ณต์ ํ์ง ์๊ณ ํ ํฐ์ ํตํด ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ค. ํ ํฐ์ด ํ์ทจ๋๋๋ผ๋ ์ ํจ ๊ธฐ๊ฐ, scope๋ก ํผํด๋ฅผ ์ค์ผ ์ ์๋ค.
- ํ ๋ฒ ์ธ๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ์ ์ธ ์ธ์ฆ ์์ด ์ง์์ ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๐ย ๋จ์
- ๋ณธ์ง์ ์ผ๋ก ์ธ๊ฐ ํ๋กํ ์ฝ์ด๋ค. ์ฆ, ์ธ์ฆ์ ์ง์ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉฐ, ์ธ์ฆ์ ์ํ ์ถ๊ฐ์ ์ธ ํ๋กํ ์ฝ์ด ํ์ํ ์ ์๋ค.
- ๋ฐ์ดํฐ ์ํธํ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ํธํ๋ฅผ ์ํด SSL/TLS๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
- Authorization Server์ ์์กด์ ์ด๋ฉฐ, ๋ฐ๋ผ์ ์๋ฒ์ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
- ๊ถํ ์์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋๋ค.
๐ย ์ฐธ๊ณ
https://hudi.blog/OAuth-2.0/
https://guide.ncloud-docs.com/docs/b2bpls-OAuth2