OAuth๋?
OAuth๋ Open Authorization์ ์ค์๋ง์ผ๋ก, ์ ๋ณด์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ฐ๋ฐฉํ ํ์ค
- OAuth ์ฉ์ด ์ ๋ฆฌ
- ๋ฆฌ์์ค ์ค๋ (resource owner)
์ธ์ฆ ์๋ฒ์ ์์ ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ฐํ๋ ์ฃผ์ฒด. ์๋น์ค๋ฅผ ์ด์ฉํ๋ ์ฌ์ฉ์๊ฐ ๋ฆฌ์์ค ์ค๋์ ํด๋น - ๋ฆฌ์์ค ์๋ฒ (resource server)
๋ฆฌ์์ ์ค๋์ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ฆฌ์์ค ์ค๋์ ์ ๋ณด๋ฅผ ๋ณดํธํ๋ ์ฃผ์ฒด๋ฅผ ์๋ฏธ. ๋ค์ด๋ฒ, ๊ตฌ๊ธ, ํ์ด์ค๋ถ์ด ๋ฆฌ์์ค ์๋ฒ์ ํด๋น - ์ธ์ฆ ์๋ฒ (authoriazation server)
ํด๋ผ์ด์ธํธ์๊ฒ ๋ฆฌ์์ค ์ค๋์ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋ ํ ํฐ์ ๋ฐ๊ธํ๋ ์ญํ ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ - ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
(client application)
์ธ์ฆ ์๋ฒ์๊ฒ ์ธ์ฆ์ ๋ฐ๊ณ ๋ฆฌ์์ค ์ค๋์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ฒด๋ฅผ ์๋ฏธ.
- ๋ฆฌ์์ค ์ค๋ (resource owner)
- ๋ฆฌ์์ค ์ค๋ ์ ๋ณด๋ฅผ ์ทจ๋ํ๋ 4๊ฐ์ง ๋ฐฉ๋ฒ
- ๊ถํ ๋ถ์ฌ ์ฝ๋ ์น์ธ ํ์
(authorization code grant type)
OAuth 2.0์์ ๊ฐ์ฅ ์ ์๋ ค์ง ์ธ์ฆ ๋ฐฉ๋ฒ
ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉํ๋ฉฐ, ๊ถํ์ ์ ๊ทผํ ์ ์๋ ์ฝ๋์ ๋ฆฌ์์ค ์ค๋์ ๋ํ ์์ธ์ค ํ ํฐ์ ๋ฐ๊ธ๋ฐ๋ ๋ฐฉ์ - ์์์ ์น์ธ ํ์
(implicit grant type)
์๋ฒ๊ฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์น ์ ํ๋ฆฌ์ผ์ด์ ํด๋ผ์ด์ธํธ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด ๋ฆฌ์์ค ์ค๋์ ์ธ์ฆ ๊ณผ์ ์ด์ธ์๋ ๊ถํ ์ฝ๋ ๊ตํ ๋ฑ์ ๋ณ๋ค๋ฅธ ์ธ์ฆ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ ์ก์ธ์ค ํ ํฐ์ ์ ๊ณต๋ฐ๋ ๋ฐฉ์ - ๋ฆฌ์์ค ์์ ์ ์ํธ ์๊ฒฉ์ฆ๋ช
์น์ธ ํ์
(resource owner password credentials)
ํด๋ผ์ด์ธํธ์ ํจ์ค์๋๋ฅผ ์ด์ฉํด์ ์์ธ์ค ํ ํฐ์ ๋ํ ์ฌ์ฉ์์ ์๊ฒฉ์ฆ๋ช ์ ๊ตํํ๋ ๋ฐฉ์ - ํด๋ผ์ด์ธํธ ์๊ฒฉ์ฆ๋ช
์น์ธ ํ์
(client credentials grant)
ํด๋ผ์ด์ธํธ๊ฐ ์ปจํ ์คํธ ์ธ๋ถ์์ ์์ธ์ค ํ ํฐ์ ์ป์ด ํน์ ๋ฆฌ์์ค์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์
- ๊ถํ ๋ถ์ฌ ์ฝ๋ ์น์ธ ํ์
(authorization code grant type)
- ๊ถํ ๋ถ์ฌ ์ฝ๋ ์น์ธ ํ์ ์ด๋?
1. ๊ถํ์์ฒญ
ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด ๊ถํ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ
- ํด๋ผ์ด์ธํธ = ์คํ๋ง ๋ถํธ ์๋ฒ
- ๊ถํ์๋ฒ = ์นด์นด์ค, ๊ตฌ๊ธ, ํ์ด์ค๋ถ ๊ถํ ์๋ฒ
- client_id
์ธ์ฆ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ํ ๋นํ ๊ณ ์ ์๋ณ์
์ด ๊ฐ์ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ OAuth ์๋น์ค์ ๋ฑ๋กํ ๋ ์๋น์ค์์ ์์ฑํ๋ ๊ฐ - redirect_uri
๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ด๋ํด์ผ ํ๋ URI - response_type
ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ณต๋ฐ๊ธธ ์ํ๋ ์๋ต ํ์ ์ด๋ค. ์ธ์ฆ ์ฝ๋๋ฅผ ๋ฐ์ ๋๋ code ๊ฐ์ ํฌํจํด์ผํ๋ค. - scope
์ ๊ณต ๋ฐ๊ณ ์ ํ๋ ๋ฆฌ์์ค ์ค๋์ ์ ๋ณด ๋ชฉ๋ก
2. ๋ฐ์ดํฐ ์ ๊ทผ์ฉ ๊ถํ ๋ถ์ฌ
์ธ์ฆ ์๋ฒ์ ์ฒซ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ณ๊ฒฝํ๊ณ ์ฌ์ฉ์์ ๋ฐ์ดํฐ์ ์ ๊ทผ ๋์๋ฅผ ์ป๋๋ค. (์ต์ด 1ํ๋ง ์คํ)
๋ก๊ทธ์ธ์ด ์ฑ๊ณต๋๋ฉด ๊ถํ ๋ถ์ฌ ์๋ฒ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ฅผ ์์ ํ๋ค.
3. ์ธ์ฆ ์ฝ๋ ์ ๊ณต
๋ก๊ทธ์ธ์ ์ฑ๊ณต์ ๊ถํ ์์ฒญ ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ณด๋ธ redirect_uri ๋ก ๋ฆฌ๋ค์ด๋ ์ ๋๋ค. ( ํ๋ผ๋ฏธํฐ์ ์ธ์ฆ ์ฝ๋๊ฐ ํจ๊ป ์ ์ก๋จ )
GET http://localhost:8080/myapp?code=a1s2f3mcj2
4. ์ก์ธ์ค ํ ํฐ ์๋ต
์ธ์ฆ ์ฝ๋๋ฅผ ๋ฐ์ผ๋ฉด ์์ธ์ค ํ ํฐ์ผ๋ก ๊ตํํด์ผํ๋ค.
์์ธ์ค ํ ํฐ์ ๋ก๊ทธ์ธ ์ธ์
์ ๋ํ ๋ณด์ ์๊ฒฉ์ ์ฆ๋ช
ํ๋ ์๋ณ ์ฝ๋๋ฅผ ์๋ฏธํ๋ค.
- client_secret
OAuth ์๋น์ค์ ๋ฑ๋กํ ๋ ์ ๊ณต๋ฐ๋ ๋น๋ฐํค์ด๋ค. - grant_type
๊ถํ ์ ํ์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉํ๋ค. ์ด๋๋ authorization_code๋ก ์ค์ ํด์ผ ํ๋ค.
- ์ฟ ํค
- ์ฟ ํค๋ ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ์ ์ํ์ ๋ ์น์ฌ์ดํธ๊ฐ ์ฌ์ฉํ๋ ์๋ฒ์์ ์ฌ์ฉ์์ ๋ก์ปฌ ํ๊ฒฝ์ ์ ์ฅํ๋ ์์ ๋ฐ์ดํฐ
- ์น์ฌ์ดํธ์ ๋ฐฉ๋ฌธ ์ ๋ฌด ํ์ธ, ๋ก๊ทธ์ธ ์ ๋ณด ์ ์ง ๋ฑ์ ์ฌ์ฉ๋๋ค.
- ์ฟ ํค : ํค, ๊ฐ, ๋ง๋ฃ๊ธฐ๊ฐ, ๋๋ฉ์ธ ์ ๋ณด
1.
๊ตฌ๊ธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ํด ๊ตฌ๊ธ ๊ณ์ ์ ํตํด์ฌ ๊ตฌ๊ธ ํด๋ผ์ฐ๋ ์ฝ์ ์์ ์งํํ๋ค.
์ฐ์ธก ์๋จ [์ฝ์] ๋ฉ๋ด๋ฅผ ๋๋ฌ [์ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ]๋ฅผ ์คํํฉ๋๋ค.
2.
ํ๋ก์ ํธ ์ ํ - ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
ํ๋ก์ ํธ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
ํ๋ก์ ํธ ๋ง๋ค๊ธฐ๊ฐ ์์ฑ๋๋ฉด ์ฐ์ธก ์๋ฆผ ์ฐฝ์ ํ์๊ฐ ๋ฉ๋๋ค. ํด๋น ํ๋ก์ ํธ๋ฅผ ๋๋ฌ ํ์ด์ง๋ฅผ ์ด๋ํด๋ณด์ธ์.
3.
์ผ์ชฝ ๋ฉ๋ด์์ api ๋ฐ ์๋น์ค - ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
OAuth consent screen
4.
์ฌ์ฉ์ ์ธ์ฆ์ ๋ณด- ๋์ ํ๋ฉด ๊ตฌ์ฑ ๋ฒํผ ํด๋ฆญ
OAuth ๋์ ํ๋ฉด์ ๊ตฌ์ฑํ๊ธฐ ์ํด user type์ external(์ธ๋ถ)๋ก ์ ํํด์ค๋๋ค.
5.
์ฑ ์ด๋ฆ๋ ์์ ๋กญ๊ฒ ์ ๋ ฅํ ํ ๊ด๋ จ ์ฑ์ ๋ณด๋ค์ ํ์๋ก ์ ๋ ฅํด์ผ ํฉ๋๋ค.
openid์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ถ๊ฐํ ํ ์ ๋ฐ์ดํธ๋ฅผ ๋๋ฌ ๋ง๋ฌด๋ฆฌ ํฉ๋๋ค.
6.
ํ ์คํธ ์ฌ์ฉ์๋ ์ถ๊ฐํ์ง ์์ต๋๋ค. ์์ฝํ๋ฉด์ ํ์ธ ํ ํ ๋๋ด๊ธฐ
7.
์ฌ์ฉ์ ์ธ์ฆ์ ๋ณด- ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ง๋ค๊ธฐ - OAuth ํด๋ผ์ด์ธํธ id ๋ฉ๋ด๋ก ์ด๋ํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ - ์น ์ ํ๋ฆฌ์ผ์ด์
- ์ด๋ฆ - ์์ ๋กญ๊ฒ
- ์น์ธ๋ ๋ฆฌ๋ค์ด๋ํธ URI - http://localhost:8080/login/oauth2/code/google
* ํด๋ผ์ด์ธํธ ID์ ๋น๋ฐ๋ฒํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๊ฐ์ด๋ฏ๋ก ๊ธฐ์ตํ๋ฉฐ ๋ ธ์ถ๋์ง ์๋๋ก ํฉ๋๋ค.
spring:
security:
oauth2:
client:
registration:
google:
client-id:
client-secret:
scope:
- email
- profile
application.yml ์ client-id์ secret ๋ถ๋ถ์ ๊ฐ๊ฐ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
์ธ์ฆ๊ฐ์ ๊นํ๋ธ ๊ฐ์ ์ธ๋ถ ์ฌ์ดํธ์ ์ ๋๋ก ์ ๋ก๋ํ์ง ์๋๋ก ์ฃผ์ํฉ๋๋ค.
๋ณ๋์ application-oauth.ymlํ์ผ์ ๋ง๋ค์ด ์ ๋ด์ฉ์ ๋ฃ์ด์ฃผ์ด ๊นํ๋ธ์ ์ฌ๋ผ๊ฐ์ง ์๋๋ก ์ค์ ํด๋์๋ค.
๊ตฌ๊ธ ๋ก๊ทธ์ธ ์คํํ๋ฉด
'study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
GitHub Actions๋ฅผ ์ฌ์ฉํ์ฌ CI/CD ํ์ดํ๋ผ์ธ yml ํ์ผ (0) | 2024.10.14 |
---|---|
์ธ๋ฆฌ์ผ ํ์คํธ 2024 ์ฐธ์ฌ ํ๊ธฐ (0) | 2024.09.09 |
vue vite + spring boot ํตํฉ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ (0) | 2024.04.02 |
Vue js ์ค์น vue cli (0) | 2024.03.12 |
git. pull request ๊ทธ๋ฆฌ๊ณ ์ํ์น (1) | 2024.01.24 |