
ํ ์คํธ์ฉ ํ ํฐ์ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ ๊น?
Google ์์ ๋ก๊ทธ์ธ ๋ฐฑ์๋ ์์ ์ ๋๋๊ณ ํ ์คํธ ์ฝ๋ ์์ฑ ๋จ๊ณ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ ํ ํฐ ๊ฐ์ด ํ์ํ๋ค.
FE์์ ํ ํฐ์ ๋ฐ์์ค๋ ๊ฒ ์ ์ผ ์ ํํ๊ฒ ์ง๋ง, ์์ง ๊ฐ๋ฐ ์ ์ด๋ผ ํ ํฐ์ ๋ฐ์์ฌ ์ ์๋ ์ํฉ ๐ฅน
๊ตฌ๊ธ๋ง๊ณผ ํด๋ก๋์ ๋์์ผ๋ก OAuth 2.0 Playground์์ ํ ํฐ ์์ฑ์ ํด์ ํ ์คํธ๋ฅผ ํด๋ณด์๋ค.
( ๋งํฌ : https://developers.google.com/oauthplayground/ )
์ฃผ์์ฌํญ 1. scopes์ `openid `๋ฅผ ํฌํจ์์ผ์ผ ๋๋ค.

OpenID Connect(OIDC) ํ๋กํ ์ฝ์ ๊ณต์ ์คํ์, id_token์ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํด์๋ ์ค์ฝํ์ openid๋ฅผ ํฌํจ์์ผ์ผ ๋๋ค.
-> ํ ์คํธ ํด๋ณด๋๊น email, profile๋ง ํฌํจ์์ผ๋ ์๋ต๊ฐ์ id_token ๊ฐ์ด ํฌํจ๋ผ์ ์ค๊ธด ์๋๋ฐ, ํ์ค ์คํฉ ๊ธฐ์ค์ผ๋ก๋ openid๊ฐ ์ค์ฝํ์ ํฌํจ๋์ด์ผ ํ๋ค๊ณ ํจ.
์ฃผ์์ฌํญ 2. ํ ํฐ ๊ฐ์ `id_token` ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ค.

access_token ๊ฐ์ ์๋ฌด๋ฆฌ ๋๊ฒจ์ค๋ ๊ณ์ ์ ํจํ์ง ์์ ํ ํฐ๊ฐ์ด๋ผ๋ ์ค๋ฅ๋ง ๋ ์ ํ์ฐธ ์ฝ์งํ๋๋ฐ... ๐ช
access_token์ด ์๋ id_token์ ๋๊ฒจ์ฃผ๋๊น ์ ์์ ์ผ๋ก ํ ์คํธ ํต๊ณผํ๋ค.

๐ id_token ๊ณผ access_token์ ์ฐจ์ด์
id_token (์ธ์ฆ, Authentication)
- "์ด ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ๊ฐ?"๋ฅผ ์๋ณํ๊ธฐ ์ํจ -> ๋ก๊ทธ์ธ/ํ์๊ฐ์ ์ฉ
- ์ฌ์ฉ์ ์ด๋ฆ, ์ด๋ฉ์ผ, ํ๋กํ ์ฌ์ง ๋ฑ์ ์ ๋ณด๊ฐ ์ํธํ๋ JWT(JSON Web Token) ํ์์ผ๋ก ๋ด๊ฒจ ์์
- BE๋ ๊ตฌ๊ธ ์๋ฒ์ ๋ฌผ์ด๋ณผ ํ์ ์์ด, ์์ฒด์ ์ผ๋ก ์ํ์ ๊ฒ์ฆ(์๋ช ํ์ธ)๋ง ์ํํ๊ณ , ์๋ช ์ด ๋ง์ผ๋ฉด ํ ํฐ ์์ ๋ด์ฉ(payload)์ ๋ฏฟ๊ณ , ๋ฐ๋ก ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ๋๋ค.
access_token (์ธ๊ฐ, Authorization)
- "์ด ์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ์ ๋ฆฌ์์ค(์บ๋ฆฐ๋, ์ ํ๋ธ ๋ฑ)์ ์ ๊ทผํ ๊ถํ์ด ์๋๊ฐ?"๋ฅผ ํ์ฉํ๊ธฐ ์ํจ -> API ์ฌ์ฉ์ฉ
- ๊ทธ ์์ฒด๋ก๋ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์ง ์์ ๋์ ๋ฌธ์์ด(Opaque String)์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์
- access token๋ง์ผ๋ก๋ ์ด ํ ํฐ์ด ์ ํจํ์ง, ๋๊ตฌ์ ๊ฒ์ธ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ตฌ๊ธ API๋ฅผ ํธ์ถํด์ ๋ค์ ์๋ต ๊ฐ์ ๋ฐ์์ผ ํจ.
์ฃผ์์ฌํญ3. playgroud ๊ฐ์ ์ค์ ํด ์ค์ผํ๋ค.
private val verifier: GoogleIdTokenVerifier =
GoogleIdTokenVerifier
.Builder(
NetHttpTransport(),
GsonFactory.getDefaultInstance(),
).setAudience(
listOf(
googleProperties.clientId,
),
).build()
id_token์ด Google์์ ๋ฐ๊ธํด์ค ํ ํฐ์ด ๋ง๋์ง ๊ฒ์ฆํด์ฃผ๋ GoogleIdTokenVerifier์ ๊ตฌํํ์๋ค.
์ฌ๊ธฐ์ ios ํด๋ผ์ด์ธํธ ์์ด๋๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ios ์ฑ์์ ๋ฐ๊ธ ์์ฒญํ ํ ํฐ๋ง ๊ฒ์ฆ ํต๊ณผํ๊ฒ ๋๋ค.


verify() ๋ฉ์๋๋ฅผ ์ดํด๋ณด๋ฉด id_token ๋ฌธ์์ด์ ๋ฐ์ GoogleIdToken ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ ๊ฒ์ฆ์ ์งํํ๋ค.
payload ๊ฐ์ ๋ณด๋ฉด "aud"์ "azp"๋ผ๋ Key๊ฐ ์กด์ฌํ๋๋ฐ, ๊ฐ๊ฐ "ํ ํฐ์ ์ฌ์ฉํ ์ ์๋ ๋์"๊ณผ "ํ ํฐ์ ์์ฒญํ ํด๋ผ์ด์ธํธ"๋ฅผ ์๋ฏธํ๋ค. (์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ, aud์ azp ๊ฐ์ ๋์ผํ๋ค.)
๊ฒ์ฆ ๊ฐ์ฒด๋ ์ด "aud" ๊ฐ์ด GoogleIdTokenVerifier ์์ฑ ์ ์ค์ ํ๋ ํด๋ผ์ด์ธํธ id๊ฐ๊ณผ ์ผ์นํ๋์ง ๊ฒ์ฆ์ ํ๊ฒ ๋๋๋ฐ,
OAuth 2.0 Playground๋ก ๋ฐ๊ธ ๋ฐ์ ํ ํฐ์ aud ๊ฐ์ด ๋ฌ๋ผ ๊ฒ์ฆ์ ์คํจํ๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด Playground๋ก ๊ฒ์ฆ ๋ฐ์ ํ ํฐ๋ ํต๊ณผ๋๋๋ก ์ค์ ์ ์ถ๊ฐํด์ค์ผํ๋ค.
*์ด์ ํ๊ฒฝ์์๋ ๋ฐ์๋์ง ์๋๋ก ์ฃผ์ํด์ผํ๋ค.
