( OAuth = Open Authorization )
์ฌ์ฉ์๊ฐ ํน์ ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ์ ๋ขฐํ ๋งํ ๋ฒค๋์๊ฒ ๋์ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ ๋ฐฉ์
์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ณด์ ํ๊ณ ์๋ ์ ๋ขฐํ ๋งํ third party ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ์์ ์ธ์ฆ์ ๋์ ์ฒ๋ฆฌํด์ฃผ๊ณ ,
Resource์ ๋ํ ์๊ฒฉ ์ฆ๋ช
์ฉ ํ ํฐ์ ๋ฐ๊ธํ ํ,
Client๊ฐ ํด๋น ํ ํฐ์ ์ด์ฉํด third party ์ ํ๋ฆฌ์ผ์ด์
์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ฒ ํด์ฃผ๋ ๋ฐฉ์
Ex. GitHub, Google, Facebook ๋ฑ
๐ฌ Third Party Application :
์ฐ๋ฆฌ๊ฐ ๋์ ์ธ์ฆ์ฒ๋ฆฌ ํด์ค๊ฒ.
OK ๋ ์ธ์ฆ ๋์ผ๋๊น ์๊ฒฉ ์ฆ๋ช ์ฉ ํ ํฐ ๋ฐ๊ธํด์ค๊ฒ.
๋ ์ด์ ์ฐ๋ฆฌ ์๋น์ค ์ฌ์ฉํด๋ ๋จ.
Ex. ๋ก๊ทธ์ธ ์์ฒด๋ Google ๋ก๊ทธ์ธ ์ธ์ฆ์ ์ฌ์ฉํ๊ณ ,
Google ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด Access Token์ ์ ๋ฌ๋ฐ์์
Google Calendar API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Access Token ์ด์ฉ
์ฌ์ฉ์์ ํฌ๋ฆฌ๋ด์
์ ์ด์ค์ผ๋ก ๊ด๋ฆฌํ์ง ์์๋ ๋จ
โ ๋ณด์์ฑ ํฅ์
[์ฐธ๊ณ ]
https://www.rfc-editor.org/rfc/rfc6749#section-1.1
โ jwt ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋น ์๋น์ค๋ฅผ ์ด์ฉํ๋ ์ฌ์ฉ์์ ํฌ๋ฆฌ๋ด์ ์ ์๋ฒ or DB์์ ์ง์ ๊ด๋ฆฌํ์
๐ก ๊ธฐ์กด ๋ฐฉ์์ Google Calendar API๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ ๋ ๋ฌธ์ ์ ( OAuth 2 ์ฌ์ฉ X ),
โ
โ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ํฌ๋ฆฌ๋ด์ ์ ๊ด๋ฆฌํด์ผํจ์ ๋ฌผ๋ก ์ด๊ณ ,
Google์ Calender API ์ด์ฉ์ ์ํด Google์์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์ ํฌ๋ฆฌ๋ด์ ๊น์ง ์ผ์ ๊ด๋ฆฌ ์๋น์ค์ ๊ณต์ ํด์ผํจ
โ
์ด ๊ฒฝ์ฐ,
- ๊ฐ์ฅ ์ค์ํ ์ ๋ณด์ธ ํฌ๋ฆฌ๋ด์ ์ด ๋๊ฐ๋ ๊ด๋ฆฌ๋์ด์ผ ํจ
- Google์์ password ๋ณ๊ฒฝ์ ํด๋, ์ผ์ ๊ด๋ฆฌ ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์ password๋ฅผ ๋ ๋ฐ๋ก ์ ๋ฐ์ดํธํด์ค์ผ ํจ
- ์ผ์ ๊ด๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด Google ์ฌ์ดํธ์์ ์ฌ์ฉํ๋ ํฌ๋ฆฌ๋ด์ ์ ์ง์ ์ ์ผ๋ก ๊ฐ์ง๊ณ ์์
โ
๐ OAuth 2 ์ธ์ฆ ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ, Google์์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์ ํฌ๋ฆฌ๋ด์ ์ ์ผ์ ๊ด๋ฆฌ ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ง์ ์ ์ผ๋ก ๊ด๋ฆฌํ์ง ์์ผ๋ฉด์๋ Google Calendar API๋ฅผ ์ด์ฉํ ์ ์๊ฒ ํด์ผํจ
1. third party ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๊ณตํ๋ API์ ์ง์ ์ ์ธ ์ฌ์ฉํ ๊ฒฝ์ฐ
2. ์ถ๊ฐ์ ์ธ ์ธ์ฆ ์๋น์ค ์ ๊ณต ์ฉ๋๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ
( Resource๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ตฌ์ฑ์์์ ์ด๋ฆ์ด ๋ฐ๋ )
โ๏ธ Resource Owner ( ์ฌ์ฉ์ )
Ex. A๋ผ๋ ์ฌ์ฉ์๊ฐ Google์ ๋ก๊ทธ์ธํ์ฌ Google์ ์๋น์ค(Resource)๋ฅผ ์ด์ฉํ๊ณ ์๋ค๋ฉด A๊ฐ Google ์๋น์ค๋ผ๋ Resource์ ๋ํ Resource Owner
โ๏ธ Client ( ์๋ฒ / ์ ํ๋ฆฌ์ผ์ด์ )
Resource Owner๋ฅผ ๋์ ํด ๋ณดํธ๋ Resource์ ์ก์ธ์คํ๋ ์ ํ๋ฆฌ์ผ์ด์
โ Client - Server ๋ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์
์ฌ๊ธฐ์๋ Resource๋ฅผ ๋ฐ๋ ๊ณณ์ด ์๋ฒ์ฌ์ ์๋ฒ๊ฐ Client๊ฐ ๋จ
Resource Owner์ ๋๋ฆฌ์ธ ์ญํ ์ํ
Ex. A๋ผ๋ ์ฌ์ฉ์๊ฐ B๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํด Google์ ์์ ๋ก๊ทธ์ธ์ ์ด์ฉํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ B๊ฐ Client
โ๏ธ Resource Server ( ๋ฆฌ์์ค(์๋น์ค) ์ ๊ณต ์๋ฒ )
Ex. A๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ (Client)์ด Google Photo์์ A๋ผ๋ Resource Owner์ ์ฌ์ง(Resource)์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ,
Google Photo ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด Resource Sever
โ๏ธ Authorization Server ( ์ ๊ทผ ๊ถํ ๋ถ์ฌ ์๋ฒ )
Ex. A ์ฌ์ฉ์(Resource Owner)๊ฐ Google ๋ก๊ทธ์ธ ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด,
B ์ ํ๋ฆฌ์ผ์ด์ (Client)์ด Authoriztion Server๋ก๋ถํฐ Google Photo์ ์ ์ฅ๋์ด ์๋ A์ ์ฌ์ง(Resource)์ ์ ๊ทผํ ์ ์๋ ๊ถํ(Access Token)์ ๋ถ์ฌํจ
[์ฐธ๊ณ ] https://www.rfc-editor.org/rfc/rfc6749#section-1.1
โ Resource Owner๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ (Client)์๊ฒ OAuth2 ์ธ์ฆ ์์ฒญ
( Resource Owner๋ ์์ ์ ๊ณ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ ์จ๋ ํํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ์ธ ํ๊ธธ ์ํ๋ ๊ฒ์ด๊ธฐ์, ์ด ์์ฒญ์ ์น ์ ํ๋ฆฌ์ผ์ด์ (Client)์ ์ ์กํ๋ ๊ฒ )
โก Client์ฌ Resource Owner๊ฐ Resource Owner์ ๊ณ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ third party ์ ํ๋ฆฌ์ผ์ด์
์ ๋ก๊ทธ์ธ ํ ์ ์๋๋ก,
third party ์ ํ๋ฆฌ์ผ์ด์
์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ(Redirect)
โข Resource Owner๊ฐ ๋ก๊ทธ์ธ ์ธ์ฆ์ ์งํํ๊ณ ๋ก๊ทธ์ธ ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด,
โฃ Authorization Server๊ฐ Resource Owner์ ๋ก๊ทธ์ธ ์ธ์ฆ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋์์์ ์ฆ๋ช ํ๋ Access Token์ Client์๊ฒ ์ ์ก
( Resource Owner๊ฐ ์๋ ๋๋ฆฌ์ธ ์ญํ ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ (Client)์๊ฒ ์ ์กํ๋ ๊ฒ )
โค Access Token์ ์ ๋ฌ ๋ฐ์ Client๊ฐ Resource Server์๊ฒ Resource Owner ์์ ์ Resource ์์ฒญ
โฅ Resource Server๊ฐ Client๊ฐ ์ ์กํ Access Token์ ๊ฒ์ฆ ํ,
๊ฒ์ฆ ์๋ฃ ๋๋ฉด( Client๊ฐ Resource Owner์ ๋๋ฆฌ์ธ์ผ๋ก์จ์ ์๊ฒฉ์ด ์ฆ๋ช
๋๋ฉด ) Resource Owner์ Resource๋ฅผ Client์๊ฒ ์ ์ก
[์ฐธ๊ณ ]
https://learn.microsoft.com/ko-kr/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow
โ๏ธ Authorization Grant์ ๋ฐ๋ฅธ ์ธ์ฆ ์ฒ๋ฆฌ ๋ฐฉ์
๊ถํ ๋ถ์ฌ ์น์ธ ์ฝ๋ ๋ฐฉ์ ( Authorization Code Grant )
๊ถํ ๋ถ์ฌ ์น์ธ์ ์ํด ์์ฒด ์์ฑํ Authorization Code๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์
๊ฐ์ฅ ๋ง์ด ์ฐ์ / ๊ธฐ๋ณธ
Refresh Token ์ฌ์ฉ ๊ฐ๋ฅ
๊ถํ ๋ถ์ฌ ์น์ธ ์์ฒญ์ ์๋ต ํ์
(response_type)์ code๋ก ์ง์ ํ์ฌ ์์ฒญ
โ Resource Owner(์ฌ์ฉ์)๊ฐ ์๋น์ค ์์ฒญ์ Client(์ ํ๋ฆฌ์ผ์ด์
)์๊ฒ ์ ์ก
( Ex. ๋ก๊ทธ์ธ ๋ฒํผ ๋๋ฅด๊ธฐ )
โก Client(์ ํ๋ฆฌ์ผ์ด์
)๊ฐ Authorization Server์ Authorization Code ์์ฒญ
( ์ด ๋, ๋ฏธ๋ฆฌ ์์ฑํ < Client ID / Redirect URI / ์๋ต ํ์
> ํจ๊ป ์ ์ก )
โข Resource Owner(์ฌ์ฉ์)๊ฐ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ํตํด ๋ก๊ทธ์ธ ์งํ
โฃ ๋ก๊ทธ์ธ์ด ํ์ธ๋๋ฉด Authorization Server๊ฐ Authorization Code๋ฅผ Client(์ ํ๋ฆฌ์ผ์ด์
)์๊ฒ ์ ๋ฌ
( ์ด ์ ์ ์์ฒญ๊ณผ ํจ๊ป ์ ๋ฌํ๋ Redirect URI๋ก Code๋ฅผ ์ ๋ฌ )
โค Client(์ ํ๋ฆฌ์ผ์ด์
)๊ฐ ์ ๋ฌ๋ฐ์ Authorization Code๋ฅผ ์ด์ฉํด Access Token ๋ฐ๊ธ ์์ฒญ
( ์ด ๋, < Client Secret / Redirect URI / ๊ถํ ๋ถ์ฌ ๋ฐฉ์ / Authorization Code > ํจ๊ป ์ ์ก )
โฅ ์์ฒญ ์ ๋ณด๋ฅผ ํ์ธ ํ, Redirect URI๋ก Access Token ๋ฐ๊ธ
โฆ Client(์ ํ๋ฆฌ์ผ์ด์ )๊ฐ ๋ฐ๊ธ๋ฐ์ Access Token์ ์ด์ฉํด Resource Server์๊ฒ Resource ์์ฒญ
โง Resource Server๊ฐ Access Token ํ์ธ ํ, ์์ฒญ ๋ฐ์ Resource๋ฅผ Client(์ ํ๋ฆฌ์ผ์ด์
)์๊ฒ ์ ๋ฌ
โ
์๋ฌต์ ์น์ธ ๋ฐฉ์ ( Implicit Grant )
Authorization Code ์์ด ๋ฐ๋ก Access Token์ ๋ฐ๊ธํ๋ ๋ฐฉ์
โ Authorization Server๊ฐ Client Secret์ ํตํ ํด๋ผ์ด์ธํธ ์ธ์ฆ ๊ณผ์ ์๋ต
์๊ฒฉ์ฆ๋ช
์ ์์ ํ๊ฒ ์ ์ฅํ๊ธฐ ํ๋ Client์๊ฒ ์ต์ ํ๋ ๋ฐฉ์
Ex. ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ( ์๋ฐ์คํฌ๋ฆฝํธ ๋ฑ )
Refresh Token ์ฌ์ฉ ๋ถ๊ฐ
๊ถํ ๋ถ์ฌ ์น์ธ ์์ฒญ์ ์๋ต ํ์
(response_type)์ token์ผ๋ก ์ง์ ํ์ฌ ์์ฒญ
โ Resource Owner(์ฌ์ฉ์)๊ฐ ์๋น์ค ์์ฒญ์ Client(์ ํ๋ฆฌ์ผ์ด์
)์๊ฒ ์ ์ก
( Ex. ๋ก๊ทธ์ธ ๋ฒํผ ๋๋ฅด๊ธฐ )
โก Client(์ ํ๋ฆฌ์ผ์ด์
)๊ฐ Authorization Server์๊ฒ ์ ๊ทผ ๊ถํ ์์ฒญ
( ์ด ๋, ๋ฏธ๋ฆฌ ์์ฑํ < Client ID / Redirect URI / ์๋ตํ์
> ํจ๊ป ์ ์ก )
( โ Authroization Code๋ฅผ ํ๋์ ์ํ ์์ฒญ X )
โข Resource Owner(์ฌ์ฉ์)๊ฐ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ํตํด ๋ก๊ทธ์ธ ์งํ
โฃ ๋ก๊ทธ์ธ ํ์ธ๋๋ฉด, Authorization Server๊ฐ Client(์ ํ๋ฆฌ์ผ์ด์ )์๊ฒ Access Token ์ ๋ฌ
โค Client(์ ํ๋ฆฌ์ผ์ด์ )๊ฐ ๋ฐ์ Access Token์ ์ด์ฉํด Resource Server์๊ฒ Resource ์์ฒญ
โฅ Resource Server๊ฐ Access Token ํ์ธ ํ, ์์ฒญ ๋ฐ์ Resource๋ฅผ Client(์ ํ๋ฆฌ์ผ์ด์
)์๊ฒ ์ ๋ฌ
โ
ํด๋ผ์ด์ธํธ ์๊ฒฉ ์ฆ๋ช ์น์ธ ๋ฐฉ์ ( Client Credentials Grant )
๊ฐ๋จํ๊ฒ ๋ก๊ทธ์ธ ์ ํ์ํ ์ ๋ณด(username, password)๋ก Access Token์ ๋ฐ๊ธ๋ฐ๋ ๋ฐฉ์
์์ ์ ์๋น์ค์์ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋๋ ์ธ์ฆ ๋ฐฉ์
โ Authorization Server / Resource Server / Client ๊ฐ ๋ชจ๋ ๊ฐ์ ์์คํ
์ ์ํด ์์ ๋๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅ
Ex. ์นด์นด์ค ๊ณ์ ์ผ๋ก ์นด์นด์คํ์ ์ ํ๋ฆฌ์ผ์ด์
๋ก๊ทธ์ธํ๋ ๊ฒฝ์ฐ
Refresh Token ์ฌ์ฉ ๊ฐ๋ฅ
โ Resource Owner(์ฌ์ฉ์)๊ฐ ์๋น์ค ์์ฒญ์ Client(์ ํ๋ฆฌ์ผ์ด์
)์๊ฒ ์ ์ก
( Ex. ๋ก๊ทธ์ธ ๋ฒํผ ๋๋ฅด๊ธฐ )
( ์ด ๋, ๋ก๊ทธ์ธ์ ํ์ํ ์ ๋ณด(Username / Password)๋ฅผ ์ด์ฉํด ์์ฒญ )
โก Client(์ ํ๋ฆฌ์ผ์ด์
)๊ฐ Resource Owner์๊ฒ์ ์ ๋ฌ๋ฐ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ํตํด Authorization Server์ Access Token ์์ฒญ
( ์ด ๋, ๋ฏธ๋ฆฌ ์์ฑํ < Client ID / ๊ถํ ๋ถ์ฌ ๋ฐฉ์ / ๋ก๊ทธ์ธ ์ ๋ณด > ํจ๊ป ์ ์ก )
โข ์์ฒญ๊ณผ ํจ๊ป ์จ ์ ๋ณด๋ค ํ์ธ ํ, Client(์ ํ๋ฆฌ์ผ์ด์ )์๊ฒ Access Token ์ ๋ฌ
โฃ Client(์ ํ๋ฆฌ์ผ์ด์ )๊ฐ ๋ฐ๊ธ๋ฐ์ Access Token์ ์ด์ฉํด Resource Server์๊ฒ Resource ์์ฒญ
โค Resource Server๊ฐ Access Token ํ์ธ ํ, ์์ฒญ ๋ฐ์ Resource๋ฅผ Client(์ ํ๋ฆฌ์ผ์ด์
)์๊ฒ ์ ๋ฌ
โ
์์ ์์ ์ ์๊ฒฉ ์ฆ๋ช ์น์ธ ๋ฐฉ์ ( Resource Owner Password Credential Grant )
Client ์์ ์ด ๊ด๋ฆฌํ๋ Resource / Authorization Server์ ํด๋น Client๋ฅผ ์ํ ์ ํ๋ Resource ์ ๊ทผ ๊ถํ์ด ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐฉ์
์๊ฒฉ ์ฆ๋ช ์ ์์ ํ๊ฒ ๋ณด๊ดํ ์ ์๋ Client์์๋ง ์ฌ์ฉ๋์ด์ผํจ
Refresh Token ์ฌ์ฉ ๋ถ๊ฐ
[์ฐธ๊ณ ] https://www.rfc-editor.org/rfc/rfc6749#page-23
์ค์ต์ด ์๋๋ผ ์์ง๊น์ง๋ ํ ๋งํ๋ค..!
๊ฐ๋
์ ์ตํ๊ณ ์ฃผ๋ง๋์ ์ด๊ณตํด์ผ์ง