OAuth
OAuth(2.0)์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์ ๋์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋๋ก ๊ถํ์ ์์(Delegation)ํ๋ ์ ๊ณ ํ์ค ํ๋กํ ์ฝ(RFC 6749)์ด๋ค.
๋จ์ํ ์ธ์ฆ(Authentication)์ ๋์ด ํน์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ(Authorization)์ ๊ด๋ฆฌํ๋ ํ๋ ์์ํฌ ์ญํ ์ํ
ํ๋ ์น ์ํ๊ณ์์ ๋ณด์์ฑ๊ณผ ์ฌ์ฉ์ ํธ์์ฑ์ ๋์์ ํ๋ณดํ๋ ํต์ฌ ๊ท๊ฒฉ
OAuth์ ํ์๊ณผ ๋ฐ์ ๋ฐฐ๊ฒฝ
1. OAuth ์ด์ ๋น๋ฐ๋ฒํธ ๊ณต์ ์ ๋ฌธ์
OAuth๊ฐ ์กด์ฌํ์ง ์๋ ์ด๊ธฐ ์น ํ๊ฒฝ์์๋ ์๋ํํฐ ์๋น์ค๊ฐ ์ฌ์ฉ์์ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ์์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ ์ฅํด์ผ ํ๋ค.
๋น๋ฐ๋ฒํธ ๊ณต์ ์ ์ํ์ฑ: ์๋ํํฐ ์๋น์ค๊ฐ ํดํน๋นํ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ์๋ณธ ๊ณ์ ์ ์ฒด๊ฐ ํ์ทจ๋๋ ์ฌ๊ฐํ ๋ณด์ ๊ฒฐํจ ๋ฐ์
๊ถํ ์ ์ด ๋ถ๊ฐ: ํน์ ๊ธฐ๋ฅ(์: ์ฃผ์๋ก ์กฐํ)๋ง ํ์ฉํ๊ณ ์ถ์ง๋ง ๋ชจ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณผ๋ํ ๊ถํ ๋ถ์ฌ ๋ฌธ์
๊ด๋ฆฌ์ ์ด๋ ค์: ์ฌ์ฉ์๊ฐ ํฌํธ ์ฌ์ดํธ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ฐ๋๋ ๋ชจ๋ ์๋น์ค์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉฐ, ๊ฐ๋ณ ์๋น์ค๋ณ๋ก ๊ถํ์ ์ทจ์ํ ๋ฐฉ๋ฒ์ด ๋ถ์ฌ
2. OAuth 1.0์ ํ๊ณ์ 2.0์ผ๋ก์ ์งํ
2007๋ ๋ฑ์ฅํ OAuth 1.0์ ๋ณด์์ ๊ฐํํ์ผ๋ ๊ธฐ์ ์ ์ธ ๋ณต์ก์ฑ์ด ๋์๋ค.
1.0์ ํ๊ณ: ๋ชจ๋ ์์ฒญ์ ๋ํด ๋ณต์กํ HMAC ์๋ช (Signature) ์์ฑ์ด ํ์์ ์ด๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌํ ๋์ด๋๊ฐ ๋งค์ฐ ๋์
ํ๊ฒฝ์ ์ ์ฝ: ๋ฐ์คํฌํฑ์ด๋ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์์ ์ง์์ด ๋ฏธํกํ๋ฉฐ ์ธ์ ๊ด๋ฆฌ๊ฐ ๊น๋ค๋ก์
2.0์ ๊ฐ์ : ์ํธํ ์๋ช ๋์ HTTPS(TLS) ๋ณด์ ํต์ ์ ์์กดํ์ฌ ๊ตฌํ์ ๋จ์ํํจ
ํ์ฅ์ฑ ๊ฐํ: ์น, ๋ชจ๋ฐ์ผ, ์๋ฒ ๊ฐ ํต์ ๋ฑ ๋ค์ํ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์ ๋ง์ถ ๋ค ๊ฐ์ง ์ด์์ ์น์ธ ๋ฐฉ์(Grant Types) ์ ์ ๋ฐ ์ค์ฝํ(Scope) ๊ฐ๋ ๋์
OAuth 2.0์ด ํด๊ฒฐํ๋ ๋ฌธ์
1. ๋ณด์์ฑ ์ฆ๋์ ๊ด๋ฆฌ ์ฃผ์ฒด์ ์ค์ํ
์ฌ์ฉ์๋ ์์ ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ๋ขฐ๋๊ฐ ๋ฎ์ ์๋ํํฐ ์๋น์ค์ ๋ ธ์ถํ ํ์๊ฐ ์์ด์ก๋ค.
๋๊ธฐ์ ๋ณด์ ์ธํ๋ผ ํ์ฉ: ๋น๋ฐ๋ฒํธ ๊ด๋ฆฌ ๋ฐ 2๋จ๊ณ ์ธ์ฆ(2FA)๊ณผ ๊ฐ์ ๊ณ ๋์ ๋ณด์ ์ฒ๋ฆฌ๋ฅผ ๊ตฌ๊ธ, ์ ํ ๋ฑ ๊ฒ์ฆ๋ ํ๋ซํผ์ ์์ ๊ฐ๋ฅ
๋ฆฌ์คํฌ ๋ถ์ฐ: ์๋น์ค๊ฐ ํดํน๋นํ๋๋ผ๋ ์ ์ถ๋๋ ๊ฒ์ ํด๋น ์๋น์ค์ ๊ตญํ๋ ์์ ์ก์ธ์ค ํ ํฐ์ผ ๋ฟ์ด๋ฉฐ ์ฌ์ฉ์์ ํตํฉ ๊ณ์ ์ ๋ณด๋ ์์ ํ๊ฒ ๋ณดํธ
2. ์ฌ์ฉ์ ํธ์์ฑ ๋ฐ ๊ถํ ์ ์ด
๊ฐํธ ๋ก๊ทธ์ธ(Single Sign-On): ๋ณ๋์ ํ์๊ฐ์ ์์ด ๊ธฐ์กด ํ๋ซํผ ๊ณ์ ์ผ๋ก ์ฆ์ ์๋น์ค ์ด์ฉ ๊ฐ๋ฅ
์ต์ ๊ถํ ์์น: ์ฌ์ฉ์๊ฐ ์๋น์ค์ ํ์ฉํ ๋ฐ์ดํฐ ๋ฒ์(์: ์ด๋ฉ์ผ๋ง ํ์ฉ)๋ฅผ ์ง์ ์ ํํ์ฌ ์ ์ด ๊ฐ๋ฅ
ํต์ฌ ์ฉ์ด ๋ฐ ๊ตฌ์ฑ ์์
OAuth 2.0 ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๋ค ๊ฐ์ง ์ฃผ์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฆฌ์์ค ์์ ์(Resource Owner): ๋ฐ์ดํฐ์ ์ฃผ์ธ ์ฌ์ฉ์(User)
ํด๋ผ์ด์ธํธ(Client): ์ฌ์ฉ์์ ๊ถํ์ ๋ฐ์ ๋ฆฌ์์ค ์๋ฒ์ ์ ๊ทผํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์ (์๋ํํฐ ์๋น์ค)
๊ถํ ๋ถ์ฌ ์๋ฒ(Authorization Server): ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ํ ํฐ์ ๋ฐ๊ธํ๋ ์๋ฒ
๋ฆฌ์์ค ์๋ฒ(Resource Server): ์ฌ์ฉ์์ ๋ณดํธ๋ ์์์ ํธ์คํ ํ๊ณ API๋ฅผ ์ ๊ณตํ๋ ์๋ฒ
ํ๋ ์น ํ์ค ์ธ์ฆ ํ๋ก์ฐ - Authorization Code Grant
๊ฐ์ฅ ๊ถ์ฅ๋๋ ๋ฐฉ์์ผ๋ก, ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ํ ํฐ์ ๋ฐ์ง ์๊ณ ์ผ์์ ์ธ ์น์ธ ์ฝ๋(Code)๋ฅผ ๊ฑฐ์ณ ๋ฐฑ์๋์์ ์์ ํ๊ฒ ํ ํฐ์ ๊ตํํ๋ค.
์น์ธ ์ฝ๋ ๋ฐฉ์์ด ์์ ํ ์ด์
๋ธ๋ผ์ฐ์ ๋ฅผ ํตํ๋ ๋ฐ์ดํฐ๋ ํ์ทจ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก ์ผํ์ฑ ์ฝ๋๋ง ๋ ธ์ถ
์ค์ ํ ํฐ ๊ตํ์ ๋ฐฑ์๋ ์๋ฒ์ ๊ถํ ์๋ฒ ๊ฐ์ ์ง์ ํต์ (Server-to-Server)์ผ๋ก ์ํ
Client Secret์ด๋ผ๋ ๋น๋ฐ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์์ ์ถ๊ฐ ๊ฒ์ฆ
PKCE(Proof Key for Code Exchange) ์ฌ์ธต ์ดํด
PKCE๋ ์น์ธ ์ฝ๋ ๊ฐ๋ก์ฑ๊ธฐ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํ ํ์ ๋ณด์ ํ์ฅ ์ฌ์์ด๋ค.
PKCE ๋ฑ์ฅ ๋ฐฐ๊ฒฝ๊ณผ ๋ชฉ์
์ผ๋ฐ์ ์ธ ์น์ธ ์ฝ๋ ๋ฐฉ์์์๋ ๋ฆฌ๋ค์ด๋ ํธ ๊ณผ์ ์์ ์ฝ๋๊ฐ ํ์ทจ๋ ์ํ์ด ์กด์ฌํ๋ค.
๋ชจ๋ฐ์ผ ์ฑ, SPA์ฒ๋ผ ์์ค ์ฝ๋๊ฐ ๋ ธ์ถ๋๊ธฐ ์ฌ์ด ํ๊ฒฝ์์๋ Client Secret์ ์์ ํ๊ฒ ๋ณด๊ด ๋ถ๊ฐ๋ฅ
๊ณต๊ฒฉ์๊ฐ ์ค๊ฐ์ ์ฝ๋๋ฅผ ๊ฐ๋ก์ฑ์ด ์ก์ธ์ค ํ ํฐ์ ๋ถ์ ๋ฐ๊ธ ๋ฐ์ ์ ์๋ ์ทจ์ฝ์ ์กด์ฌ
PKCE๋ ํ ํฐ ์์ฒญ ์์ ์ ๋ณ๋์ ๊ฒ์ฆ ๋จ๊ณ(Proof Key)๋ฅผ ์ถ๊ฐํ์ฌ ๋ฌธ์ ํด๊ฒฐ
PKCE ๋์ ๋งค์ปค๋์ฆ ๋ฐ ํ๋ก์ฐ
Code Verifier ์์ฑ: ํด๋ผ์ด์ธํธ๊ฐ ์์์ ๋ฌด์์ ๋ฌธ์์ด์ ์์ฑ
Code Challenge ์์ฑ: Verifier๋ฅผ SHA-256์ผ๋ก ํด์ฑํ์ฌ ์์ฑ
์น์ธ ์์ฒญ: ํด๋ผ์ด์ธํธ๊ฐ ๊ถํ ์๋ฒ์ Challenge ์ ์ก
ํ ํฐ ๊ตํ: ์ฝ๋๋ฅผ ๋ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ํ ํฐ์ ์์ฒญํ ๋ ์๋ณธ Verifier๋ฅผ ํจ๊ป ์ ์ก
์๋ฒ ๊ฒ์ฆ: ์๋ฒ๋ ์ ์ฅํ๋ Challenge์ ์ ๋ฌ๋ฐ์ Verifier๊ฐ ์ผ์นํ๋์ง ํ์ธ ํ ํ ํฐ ๋ฐ๊ธ
Last updated