- nestjs
- ํธ๋ฆฌ
- C++
- ์์ฝ๋
- ์น๋ฆฐ์ด
- LCs
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- js
- Python
- ์๊ณ ๋ฆฌ์ฆ
- ๋นํธ๋ง์คํน
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- go
- DP
- golang
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ์นด์นด์ค2021
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- DFS
- ์ํฐ๋
- ๋นํธ๋งต
- ๋ค์ต์คํธ๋ผ
- ๋ฐฑ์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- ์นด์นด์ค ์ฝํ
- ์ฌ๊ท
- ํ๋ฆฌ์จ๋ณด๋ฉ
- BFS
- ์ด๋ถํ์
- Union-Find
- Today
- Total
Hello Ocean! ๐ผ
[OAuth 2.0] OAuth 2.0์ ๋ํด ์์๋ณด์! ๋ณธ๋ฌธ
ํ๋ก์ ํธ ์งํ์ค์ ์์ ๋ก๊ทธ์ธ ๊ตฌํ์ด ํ์ํด์ ์ด ๊ธฐ์ ์ ๋ํด ์ฒ์ ์ ํ๊ฒ ๋์๋ค.
๊ทธ๋ฅ ๋ฌดํฑ๋๊ณ ์ฌ์ฉํ๊ธฐ๋ณด๋ค, ์๊ฐ ๋ฌด์์ด๊ณ ์ ํ์ํ์ง์ ๋ํด ๊ณต๋ถํด๋ณด๊ณ ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ค.
OAuth 2.0์ ๋ฌด์์ธ๊ฐ?
์ผ๋จ, ์๊ฐ ๋ฌด์์ธ์ง ์์์ผ ํ๋ค.
OAuth 2.0์ ๊ณต์๋ฌธ์ ์ฒซ ๋ฌธ๋จ์ ์๊ฐ๊ฐ ๋์์๋ค.
OAuth 2.0 is the industry-standard protocol for authorization.
OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.
์ ๋ฆฌํ์๋ฉด,
Authorization(์ธ์ฆ)์ ์ํ ํ์ค ํ๋กํ ์ฝ์ด๋ฉฐ,
web, ๋ชจ๋ฐ์ผ ๋ฐ ๊ธฐํ ๋ฑ๋ฑ์์ ํน์ ํ authorizatioin(์ธ์ฆ)์ ์ ๊ณตํ ๋, client ๊ฐ๋ฐ์์ ํธ์์ฌ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค.
๊ทธ๋ ๋ค๋ฉด, ์๊ฐ ์ ํ์ํ ๊น?
OAuth ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๋ด ์ด๋ฆ์ ๋ด Bada๋ผ๋ ์ฌ์ดํธ๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
Bada๋ ์ฌ์ฉ์์ ๊ตฌ๊ธ ๊ณ์ ์ ์ฐ๋ฝ์ฒ ๋ชฉ๋ก์ ์ ๊ทผํ๊ณ ์ถ์๋ค.
์ด๋ฅผ ์ํด์, Bada๊ฐ ์ฌ์ฉ์์ ํ๋ฝ์ ๋ฐ์ ์ฌ์ฉ์์ ๊ตฌ๊ธ id, pw๋ฅผ ์์งํ์ฌ ์ ๊ทผํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ฐ ๋ฐฉ๋ฒ์ด ์ณ์๊น? ์ ๋ ์๋๋ค!
๋ฌธ์ ์ ์ ํฌ๊ฒ ๋ ๊ฐ์ด๋ค.
1) Bada๋ ์ฐ๋ฝ์ฒ ๋ชฉ๋ก ๋ฟ ์๋๋ผ, ๊ตฌ๊ธ ๋ด์ ์ฌ์ฉ์์ ๋ชจ~๋ ์ ๋ณด์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
2) Bada๋ ์ฌ์ฉ์์๊ฒ์ ๋ฐ์ ๊ตฌ๊ธ pw๋ฅผ ํ๋ฌธ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์ฅํด์ผ ํ๋ค.
→ ๋งํ ํ์๋ ์์ด ๋ณด์์ ๋งค์ฐ ์ทจ์ฝํ๋ค.
๊ทธ๋์, ์ฌ์ฉ์์ ๊ตฌ๊ธ pw๋ฅผ ๊ณต์ ํ์ง ์๊ณ ๋, ๊ตฌ๊ธ์ ์ฐ๋ฝ์ฒ ๋ชฉ๋ก ์ ๋ณด์ ๋ํด ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ Authorization Framework๊ฐ ํ์ํ๋ค.
์ด ๊ฒ์ด OAuth์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ด๋ค.
OAuth 2.0 ํ๋ฆ
Client Application : Bada
Authorization Server : ๊ตฌ๊ธ(์ธ์ฆ)
Resource Server : ๊ตฌ๊ธ(์ ๋ณด ์ ๊ณต)
Resource Owner : ์ฌ์ฉ์
1. Client Application๋ค์, Authorization Server์ Access Token์ ์์ฒญํ ์ ์๋ค.
2. Resource Owner๋ค์ Authorization Server์ ๋ก๊ทธ์ธํ๊ณ , Client Application์ด ํน์ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋๋ก ๋์ํ๋ฉด ๋๋ค.
3. ๋ฐ๊ธ๋ฐ์ Access Token์ด ์์ผ๋ฉด, Client Application์ Resource Server์ ์ฌ์ฉ์์ ๋ํ ํน์ ์ ๋ณด๋ฅผ ์์ฒญํด ๋ฐ์ ์ ์๋ค.
์ ํ๋ฆ์ ํตํด์,
1) ์ฐ๋ฆฌ๊ฐ ์์์ ํ๊ณ ์ํ๋ Bada๊ฐ ์ฌ์ฉ์์ ๊ตฌ๊ธ๊ณ์ ์ ์ฐ๋ฝ์ฒ ๋ชฉ๋ก์ ๋ฐ์์ฌ ์ ์๋ค.
2) Bada๋ ์ฌ์ฉ์์ ๊ตฌ๊ธ pw๋ฅผ ์ ์ ์์ผ๋ฉฐ, ์ ๊ทผ์ ๋์ํ ์ ๋ณด ์ด์ธ์ ๋ค๋ฅธ ์ ๋ณด์ ์ ๊ทผํ ์๋ ์๋ค. (๋ฌธ์ ์ ํด๊ฒฐ)
OAuth 2.0 ๊ตฌํ
ํฌ๊ฒ ์ธ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ → ๊ณต์๋ฌธ์์ ๋งํฌ๋์ด์๋ ์ฐธ๊ณ ์๋ฃ์ด๋ฉฐ, ์ง์ ๊ผญ ์ฝ์ด๋ณด๊ธฐ๋ฅผ ๋ฐ๋๋ค. ์ดํด๊ฐ ์์ฃผ ์๋จ!
1. implicit flow (์์์ ํ๋ฆ)
SPA(Single Page Application)์์ implicit flow๋ก ๊ตฌํ๋ OAuth2.0๋ฅผ ์ฌ์ฉํ์ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ ๊ทธ๋ฆผ์์ 6. Respond with TOKENS ๊ณผ์ ์ด ์ด๋ฃจ์ด์ง ๋, ๋ธ๋ผ์ฐ์ ์ url์ token์ด ๋ ธ์ถ๋๊ธฐ ๋๋ฌธ์ด๋ค.
TOKEN์ ์ค ๋, Client App์ callback url์ ํธ์ถํ์ฌ ์ ๋ฌํ๋๋ฐ,
์ด ๋ ์ ๋ฌ๋๋ Token์ด Query ํ๋ผ๋ฏธํฐ ํํ๋ก ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์, ์ด๋ฐ ์ผ์ ๋ง๊ธฐ์ํด OpenId Connect(OIDC)๊ฐ ๋ฑ์ฅํ๋ค.
OIDC is a thin layer on top of OAuth 2.0 that introduces a new type of token: the Identity Token.
๋ค์ 2,3๋ฒ์์ code๋ผ๊ณ ๋ถ๋ฆฌ๋ identity๋ฅผ ์ํ token์ ์ถ๊ฐ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
2,3๋ฒ ๋ชจ๋ OAuth2.0 + OIDC ๋ฅผ ์ด์ฉํ ๋ฐฉ์์ด๋ฉฐ, ์ด๋ค flow๋ฅผ ์ฌ์ฉํ๋๊ฐ ๋ค๋ฅด๋ค.
2. Authorization Code Flow
์์ implicit flow์์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์,
callback url๋ก ๋ฐ๋ก token์ ์ ๋ฌ๋ฐ๋ ๊ฒ์ด ์๋๋ผ, code๋ฅผ ์ ๋ฌ๋ฐ๋ ๊ฒ์ด๋ค.
Client App์ ์ด code๋ก Authorization Sever์ Token์ ์์ฒญํ๋ค.
(Token์ response bodyํํ๋ก ๋ฐ์ ์ ์์ด ๋ ธ์ถ๋์ง ์๋ ๊ฒ์ด๋ค.)
Client Secret์ด ์ ์ํ์ธ(Credentials)์ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
* Client ID vs Client Secret
Client ID๊ฐ ์ด๋ฏธ ์๋๋ฐ ์ Client Secret์ด ์ถ๊ฐ๋ก ํ์ํ์ง๊ฐ ์๋ฌธ์ด ๋ค์๋ค.
OAuth์ ๊ด๋ จ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด, ์ ์ค๋ช ๋์ด์๋ค.
์์ฝํ์๋ฉด,
Client ID๋ publicํ๋ค. (Application์ ์ํ ๊ณต๊ฐ ์๋ณ์์ด๋ค.)
Client Secret๋ ๋ง ๊ทธ๋๋ก ๋น๋ฐ. privateํ๊ฒ ์จ๊ฒจ์ ธ์ผ ํ๋ ๊ฐ์ด๋ค. (Client App๊ณผ Authorization Server๋ง ์๊ณ ์๋๋ก)
github์ OAuth๋ฅผ ์ด์ฉํ ๋, ๋ก๊ทธ์ธ ํ์ด์ง๋ก redirect์ํค๋๋ฐ, client_id๊ฐ ๋ ธ์ถ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
3. PKCE (Proof Key for Code Exchange)
2๋ฒ์ Authorization Code Flow์์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์, Client Secret์ด ์๋ค๋ ๊ฒ์ด๋ค.
Client Secret์ ๋จ์ ์, Authorization Server์์ ๋ฏธ๋ฆฌ ๋ฐ๊ธํด์ฃผ๋ ๊ณ ์ ์ํธ๋ผ๋ ๊ฒ์ด๋ค.
Client App์์ ์ด ๊ฐ์ ์ด๋์๊ฐ ์ ์ฅํด๋์ผํ๊ธฐ ๋๋ฌธ์ ์ ์ถ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์!
๋์ ์ผ๋ก ์์ฑํ๋ ์ผํ์ฉ ์ํธ๋ฅผ ๋ง๋ค์ด Client Secret ๋์ ์ ์ด์ฉํ๋ค.
์ ํ๋ฆ๋์์ ๋ ธ๋์ ํ๊ดํ์ผ๋ก ์น ํด์ง ๋ถ๋ถ์ด ๊ด๋ จ ๋ด์ฉ์ด๋ค.
์ด ๊ณต๋ถ๋ฅผ ํ๋ฉด์, github์ OAuth App์ ๋ง๋ค์ด ํ ์คํธํด๋ณด์๋๋ฐ github์์๋ 2๋ฒ ๋ฐฉ์์ธ Client Secret์ ์ด์ฉํ๊ณ ์์๋ค.
ํ๊ธฐ
์ธ์ฆ ํ๋กํ ์ฝ์ ๊ณต์๋ฌธ์๋ก ๊ณต๋ถํด ๋ณธ ๊ฒ์ ์ฒ์์ด์๋ค.
์๋ ์ ๋ธ๋ก๊ทธ ๋ช ๊ฐ๋ฅผ ๋ดค์๋๋ฐ ์ฝ๊ฒ ์ดํด๊ฐ ๋์ง ์์์๋ค. ์ด๋ฒ์๋ ๊ณต์๋ฌธ์๋ก ๊ณต๋ถํ๊ธฐ ๋๋ฌธ์ ์ดํด๊ฐ ๋ ์๋๊ณ ๊น์ ๋ถ๋ถ๊น์ง ๋ณผ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
์์ ๋ก๊ทธ์ธ ๊ตฌํ์ด ํ์ํด์ ์ ํ๊ฒ๋ ํ๋กํ ์ฝ์ด์๋๋ฐ, ๊ทธ๋ฅ ๊ฐ์ ธ๋ค์ฐ์ง ์๊ณ ์ด๋ ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ๊ฒ ๋์ด์ ์ข๋ค!
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ๋ ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค :)
'Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[VanillaJS] map๊ณผ forEach (0) | 2021.10.01 |
---|---|
[Postman] request์ cookie undefined error ํด๊ฒฐ (0) | 2021.08.27 |
[VanillaJS] ๊ฐ์ฒด ์ ๋ ฌ ์ด๋ป๊ฒ ํ์ง? (feat. ๋ฌธ์์ด) (0) | 2021.08.23 |
[nodejs-react]Server-Client ํต์ ์ ๋ฌดํ ํธ์ถ ํด๊ฒฐ (0) | 2021.03.01 |
[Node.js] ์๋ฒ ์์ฑ (0) | 2021.01.26 |