https://www.youtube.com/watch?v=996OiexHze0
<aside> ๐ก
OAuth2.0์ Client ์ ํ๋ฆฌ์ผ์ด์ ์๊ฒ ์์ ์ ๋ฆฌ์์ค์ ์ ํ๋ ์ ๊ทผ์ ํ์ฉํ ์ ์๋๋ก ํ๋ ์ธ๊ฐ ํ๋กํ ์ฝ์ด๋ค.
</aside>
<aside> ๐ก
์๋์์ ์ธ๊ธ๋๋ โ์๋น์คโ๋ OAuth2.0 ์ปจํ ์คํธ์์๋ Client์ด๋ค.
</aside>
์ด๋ค ์๋น์ค(Client
)์์ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ์ง์ํ ๋, ๊ตฌ๊ธ ๋ก๊ทธ์ธํ ์ฌ์ฉ์(Resource Owner
)์ ์ฐ๋ฝ์ฒ ๋ชฉ๋ก์ ์ ๊ทผํ ํ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. OAuth2.0์ด ์๋ค๊ณ ํ๋ค๋ฉด, ์ฌ์ฉ์(Resource Owner
)๊ฐ ๊ทธ๋ฌํ๋ฏ ์ด ์๋น์ค(Client
)๋ ๊ตฌ๊ธ์ ์ฌ์ฉ์(Resource Owner
)์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธํ์ฌ ์ฌ์ฉ์์ ์ฐ๋ฝ์ฒ ์ ๋ณด๋ฅผ ์กฐํํด์ผ ํ ๊ฒ์ด๋ค. ์ฆ, ์๋น์ค(Client
)๊ฐ ์ฌ์ฉ์(Resource Owner
)์ ๋น๋ฐ๋ฒํธ๋ฅผ ์๊ตฌํ๊ฒ ๋๋ค.
๋น์ฐํ๊ฒ๋, ์ด๋ฐ ๋ฐฉ์์ ์ค์๋น์ค์์ ์ฌ์ฉ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์(Resource Owner
)๊ฐ ์๋น์ค(Client
)์ ์์ ์ ๊ตฌ๊ธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ ์๋น์ค(Client
)์๊ฒ ์์ ์ ๊ตฌ๊ธ ์ฐ๋ฝ์ฒ์ ์ ๊ทผํ ์ ์๋๋ก ํ์ฉํด์ฃผ๋ ํ๋กํ ์ฝ์ด ํ์ํ๊ณ , ์ด๊ฒ์ด OAuth2.0์ด ๋ฑ์ฅํ ๋ฐฐ๊ฒฝ์ด๋ค.
์ฌ์ฉ์(Resource Owner
)์ ๊ตฌ๊ธ ๋น๋ฐ๋ฒํธ๋ ์ค์ง ์ฌ์ฉ์๋ง ์์์ผ ํ๊ธฐ ๋๋ฌธ์, ๊ตฌ๊ธ์ ๋ก๊ทธ์ธํ๋ ๊ฒ๋ ์ค์ง ์ฌ์ฉ์(Resource Owner
)์ฌ์ผ๋ง ํ๋ค. ๋ฐ๋ผ์ ์๋น์ค(Client
)๋ ์ฌ์ฉ์(Resource Owner
)๊ฐ ์ง์ ๊ตฌ๊ธ์ ๋ก๊ทธ์ธํ ์ ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ , ์ด ๊ณผ์ ์์ ๊ตฌ๊ธ์ ์์์ ์ ๊ทผํ๋๋ฐ ๋ํ ๋์๋ฅผ ๊ตฌํ๋ค. ์ด๊ฒ์ ๊ตฌ์ฒด์ ์ผ๋ก ํํํ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ๋ค.
sequenceDiagram
box blue FrontChannel
participant Client
participant Google
participant Resource Owner
end
box red BackChannel
participant Client's Server
participant Google's Authorization Server
participant Google's Resource Server
end
Client->>Resource Owner: '๊ตฌ๊ธ ๋ก๊ทธ์ธ'๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค ์ ๊ณต
Resource Owner ->> Google: ๊ตฌ๊ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ๋์ด ๋ก๊ทธ์ธ
Google->>Resource Owner: Client ์ ํ๋ฆฌ์ผ์ด์
์ด Scope์ ํด๋นํ๋ ์์์ ์ ๊ทผํ๋ ๊ฒ์ ๋์๋ฅผ ๊ตฌํจ
Resource Owner->>Google: ๋์
Google->>Client: ์ฌ์ ์ ์ฝ์๋ redirect uri ํน์ callback ๊ฒฝ๋ก๋ก ๋ฆฌ๋ค์ด๋ ํธ๋จ. ์ด๋ uri์ ์ผ์ข
์ ํฐ์ผ์ธ code๊ฐ ํฌํจ๋จ(OAuth2.0 ์ปจํ
์คํธ ์ Authorization Grant)
Client->>Client's Server: ๊ตฌ๊ธ๋ก๋ถํฐ ๋ฐ๊ธ๋ฐ์ ํฐ์ผ์ธ code๋ฅผ ์์ ์ ์๋ฒ๋ก ์ ๋ฌ
Client's Server-->Google's Authorization Server: ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ ์ ๊ตฌ๊ธ๋ก๋ถํฐ ๋ฐ๊ธ๋ฐ์ ์์ ์ ๋น๋ฐํค์ ํจ๊ป code๋ฅผ ์ ์ถ
Google's Authorization Server-->Client's Server: ํด๋ผ์ด์ธํธ๊ฐ ๊ถํ์ด ์๋ค๋ฉด, access token ๋ฐํ
Client's Server-->Google's Resource Server: ๊ตฌ๊ธ์ ์ธ๊ฐ ์๋ฒ๋ก๋ถํฐ ๋ฐ๊ธ ๋ฐ์ access token์ ์ ์ถํ์ฌ ์์์ ์ ๊ทผ
OAuth2.0์์ ์๋น์ค(Client
)๊ฐ ์ฌ์ฉ์(Resource Owner
)๋ก๋ถํฐ ์ป์ ์ ์๋ ๊ฑด ์์์ ๋ํ ์ ๊ทผ ๊ถํ์ด์ง, ์ฌ์ฉ์์ ์ ์(ID)์ ๋ณด์ฅ๋์ง ์๋๋ค. ๋ง์ฝ Scope์ ์ฌ์ฉ์์ ์ ์ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์๋ค๋ฉด, ํด๋น ๋ฐฉ๋ฒ์ผ๋ก ์ฐํํ์ฌ ์ธ์ฆ์ ๊ตฌํํ ์๋ ์์ง๋ง ์ด๋๊น์ง๋ ์ฐํ์์ ๋ถ๊ณผํ๋ค. OpenID Connect๋ ์ด๋ฌํ ์ธ์ฆ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด OAuth2.0์ ํ์ฅํ ํ๋กํ ์ฝ์ด๋ค.
OAuth2.0์์์ Scope์ openid
๋ฅผ ํฌํจ์ํค๋ฉด, ๊ตฌ๊ธ์ ์ธ๊ฐ ์๋ฒ๋ก๋ถํฐ access token๋ฟ๋ง ์๋๋ผ, ID token๋ ๋ฐ์ ์ ์๋ค. ID token์ JWT ํ์์ ํ ํฐ์ผ๋ก, ๋ด๋ถ์ ์ฌ์ฉ์์ ID ์ ๋ณด(ex: email, name ๋ฑ)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด ํ ํฐ์ ๊ฒ์ฆํ๊ฑฐ๋ ๋ณตํธํํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์์ ์ ์์ ์์ ํ๊ฒ ํ์ธํ ์ ์๋ค.