week 8 leekynnghee - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
jwt๋ ๋ฌด์์ด๋ฉฐ, ๊ตฌ์ฑ์ ์ด๋ป๊ฒ ๋์ด ์๊ณ , oAuth(open Authorization)์ ์ฐจ์ด๋?
๋ชจ๋ฐ์ผ ์ฑ์ผ๋ก ๋ณํํ๋ฉด์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ธ์ , ์ฟ ํค ๊ด๋ฆฌ๋ฅผ ํ์ง๋ชปํจ
JWT๋?
- JSON ํฌ๋งท์ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ๋ํ ์์ฑ์ ์ ์ฅํ๋ Claim ๊ธฐ๋ฐ์ Web Token์ด๋ค. JWT๋ ํ ํฐ ์์ฒด๋ฅผ ์ ๋ณด๋ก ์ฌ์ฉํ๋ Self-Contained ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๋ค
ํด๋ ์? Self-Contained ๋ฐฉ์?์ ๋ฌด์์ด์ง? ์๋์์ ์ข๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
JWT ์ฌ์ฉ๋ฒ?
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋, JWT๋ฅผ static ๋ณ์์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๊ฒ ๋๋ค.
- static ๋ณ์์ ์ ์ฅ๋๋ ์ด์ ๋ HTTP ํต์ ์ ํ ๋๋ง๋ค JWT๋ฅผ HTTP ํค๋์ ๋ด์์ ๋ณด๋ด์ผ ํ๋๋ฐ, ์ด๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ๊ณ์ ๋ถ๋ฌ์ค๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํด๋ผ์ด์ธํธ์์ JWT๋ฅผ ํฌํจํด ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ํ๊ฐ๋ JWT์ธ์ง๋ฅผ ๊ฒ์ฌํ๋ค.
- ๋ํ ๋ก๊ทธ์์์ ํ ๊ฒฝ์ฐ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ JWT ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค.
(์ค์ ์๋น์ค์ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ์์ ์, ์ฌ์ฉํ๋ ํ ํฐ์ blacklist๋ผ๋ DB ํ ์ด๋ธ์ ๋ฃ์ด ํด๋น ํ ํฐ์ ์ ๊ทผ์ ๋ง๋ ์์ ์ ํด์ฃผ์ด์ผ ํ๋ค.)
JWT ํน์ง
- JSON ์น ํ ํฐ์ ํ์ด๋ก๋์ ๋ช ๊ฐ์ง ํด๋ ์์ ์ ๊ธฐํ๋ JSON์ด ํฌํจ ๋ ์ ํ์ ์๋ช ๋ฐ / ๋๋ ์ ํ์ ์ํธํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ์ํ ์ธํฐ๋ท ํ์ค์ ๋๋ค.
- ํ ํฐ์ ๊ฐ์ธ ๋น๋ฐ ๋๋ ๊ณต๊ฐ / ๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ๋ฉ๋๋ค.
์ผ๋ฐ ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ๊ณผ ํด๋ ์(Claim) ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ
- ์ผ๋ฐ ํ ํฐ ๊ธฐ๋ฐ์ ๊ณผ๊ฑฐ์ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ์ฃผ๋ก ์๋ฏธ๊ฐ ์๋ ๋ฌธ์์ด(Random string) ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ์๋์ ๊ฐ์ด ํํ์ด ๋๋ค.
{
"code": 0,
"msg": null,
"response":{
"token": "a9ace025c90c0da2161075da6ddd3492a2fca776",
"now": 1512446940,
"expired_at": 1512448740
}
}
์ผ๋ฐ ํ ํฐ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฌธ์ ์ ์?
- ์ด๋ฐ ์ผ๋ฐ ํ ํฐ์ ๋จ์ํ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ์ ๋ณด๋ฅผ ๋ด๊ฑฐ๋ ํ ์ ์๋ค. ํฌ๊ฒ ๋ณด์๋ฉด ์๋์ ๊ฐ์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์๋ค.
- ๋ฐ๊ธ๋ ํ ํฐ์ ๋ํด์ ๋ง๋ฃ๋ฅผ ์ํฌ ์๋จ์ด ์๋ค.
- ๋ฐ๊ธ๋ ํ ํฐ์ ๊ฒ์ฌํ๊ฑฐ๋ ์ฒ๋ฆฌํ ๋๋ง๋ค DB์ ์ ๊ทผํ์ฌ ๊ฒ์ฌํ ๊ฒฝ์ฐ ๋ถ๋ด์ด ์๊ธด๋ค.
- ์ฌ์ฉ์ ๋ก๊ทธ์์ ๋ฑ์ผ๋ก ์ธํ ํ ํฐ์ ๊ด๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ด๋์ ๋ ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด ํด๋ ์(Claim) ๊ธฐ๋ฐ ํ ํฐ ๋ฐฉ์์ด๋ค.
ํด๋ ์(Claim)์ด๋ ์ฌ์ฉ์ ์ ๋ณด๋ ๋ฐ์ดํฐ ์์ฑ ๋ฑ์ ์๋ฏธํ๋ค.
๊ทธ๋์ ํด๋ ์ ํ ํฐ์ด๋ผ ํ๋ฉด ํ ํฐ ์์ ์ ๋ฐ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํ ํฐ์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค.
์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ฒ์ ํด๋ ์ ๊ธฐ๋ฐ์ด๋ผ ํ ์ ์๋ค.
{
"id":"mhlab",
"role":["admin","hr"],
"company":"hexlant"
}
์ด๋ฐ ํด๋ ์์ ๊ธฐ๋ฐํ ํ ํฐ ์ค ๊ฐ์ฅ ๋ํ์ ์ธ ๊ฒ์ด ๋ฐ๋ก JWT๋ค.
What is JWT?
- JWT(Json Web Token)์ ์์์ ์ด์ผ๊ธฐ ํ ํด๋ ์ ๊ธฐ๋ฐ ํ ํฐ์ด๋ฉฐ, ์ด๋ฆ์์ ์ ์ ์๋ ๊ฒ์ฒ๋ผ JSON์ ์ด์ฉํ ํ ํฐ์ด๊ณ ์น ํ์ค(RFC 7519)๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค.
- ์์ธํ ๋ด์ฉ์ JWT ๊ณต์ํ์ด์ง์์ ํ์ธ ๊ฐ๋ฅํ๋ค.
๊ตฌ์กฐ์ ์์ฑ
HEADER.PAYLOAD.SIGNATURE
- ํค๋(Header), ํ์ด๋ก๋(Payload), ์๋ช (Signature) ์ธ ๋ถ๋ถ์ ์ (.)์ผ๋ก ๊ตฌ๋ถํ๋ ๊ตฌ์กฐ๋ค.
Header
- JWT๋ฅผ ๊ฒ์ฆํ๋๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง JSON ๊ฐ์ฒด๋ Base64 URL-Safe ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ด๋ค.
- ํค๋(Header)๋ JWT๋ฅผ ์ด๋ป๊ฒ ๊ฒ์ฆ(Verify)ํ๋๊ฐ์ ๋ํ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
- ์ฐธ๊ณ ๋ก alg๋ ์๋ช ์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ณ , kid๋ ์๋ช ์ ์ฌ์ฉํ๋ ํค(Public/Private Key)๋ฅผ ์๋ณํ๋ ๊ฐ์ด๋ค.
{
"alg": "ES256",
"kid": "Key ID"
}
- ์์ ๊ฐ์ JSON ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ์ง๋ ฌํํ๊ณ UTF-8๊ณผ Base64 URL-Safe๋ก ์ธ์ฝ๋ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํค๋๋ฅผ ์์ฑํ ์ ์๋ค.
Base64URLSafe(UTF-8('{"alg": "ES256","kid": "Key ID"}')) -> eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRCJ9
Payload
- JWT์ ๋ด์ฉ์ด๋ค. ํ์ด๋ก๋(Payload)์ ์๋ ์์ฑ๋ค์ ํด๋ ์ ์ (Claim Set)์ด๋ผ ๋ถ๋ฅธ๋ค.
- ํด๋ ์ ์ ์ JWT์ ๋ํ ๋ด์ฉ(ํ ํฐ ์์ฑ์(ํด๋ผ์ด์ธํธ)์ ์ ๋ณด, ์์ฑ ์ผ์ ๋ฑ)์ด๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์ฃผ๊ณ ๋ฐ๊ธฐ๋ก ํ ๊ฐ๋ค๋ก ๊ตฌ์ฑ๋๋ค.
{
"iss": "jinho.shin",
"iat": "1586364327"
}
- ์์ ๊ฐ์ JSON ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ์ง๋ ฌํํ๊ณ Base64 URL-Safe๋ก ์ธ์ฝ๋ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ด๋ก๋๋ฅผ ์์ฑํ ์ ์๋ค.
Base64URLSafe('{"iss": "jinho.shin","iat": "1586364327"}') -> eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6ImppbmhvLnNoaW4ifQ
Signature
- ์ (.)์ ๊ตฌ๋ถ์๋ก ํด์ ํค๋์ ํ์ด๋ก๋๋ฅผ ํฉ์น ๋ฌธ์์ด์ ์๋ช ํ ๊ฐ์ด๋ค. ์๋ช ์ ํค๋์ alg์ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๋ฐ ํค๋ฅผ ์ด์ฉํด ์ฑ์ฑํ๊ณ Base64 URL-Safe๋ก ์ธ์ฝ๋ฉํ๋ค.
Base64URLSafe(Sign('ES256', '${PRIVATE_KEY}',
'eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRCJ9.eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6ImppbmhvLnNoaW4ifQ'))) ->
MEQCIBSOVBBsCeZ_8vHulOvspJVFU3GADhyCHyzMiBFVyS3qAiB7Tm_MEXi2kLusOBpanIrcs2NVq24uuVDgH71M_fIQGg
JWT
- ์ ์ ๊ตฌ๋ถ์๋ก ํด์ ํค๋, ํ์ด๋ก๋, ์๋ช ์ ํฉ์น๋ฉด JWT๊ฐ ์์ฑ๋๋ค.
eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRCJ9.eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6ImppbmhvLn
NoaW4ifQ.eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRC9.eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6Imp
pbmhvLnNoaW4ifQ.MEQCIBSOVBBsCeZ_8vHulOvspJVFU3GADhyCHyzMiBFVyS3qAiB7Tm_ME
Xi2kLusOBpanIrcs2NVq24uuVDgH71M_fIQGg
- ์ด๋ ๊ฒ ์์ฑ๋ JWT๋ ํค๋์ alg, kid ์์ฑ๊ณผ ๊ณต๊ฐ ํค๋ฅผ ์ด์ฉํด ๊ฒ์ฆํ ์ ์๋ค.
- ์๋ช ๊ฒ์ฆ์ด ์ฑ๊ณตํ๋ฉด JWT์ ๋ชจ๋ ๋ด์ฉ์ ์ ๋ขฐํ ์ ์๊ฒ๋๊ณ , ํ์ด๋ก๋์ ๊ฐ์ผ๋ก ์ ๊ทผ ์ ์ด๋ ์ํ๋ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ฒ๋๋ค.
JWT๋ฅผ ํตํ Client-Server๊ฐ ์ธ์ฆ ๊ณผ์
- Client์์ ๋ก๊ทธ์ธ์ ํ๋ฉด Server์์ ๋ก๊ทธ์ธ ํ์ธ ํ secret key๋ฅผ ํตํด Access token์ ๋ฐ๊ธํ์ฌ ํด๋ผ์ด์ธํธ์ JWT๋ฅผ ๋ฐํํด์ค๋ค.
- ๊ทธ ํ JWT๋ฅผ ํด๋ผ์ด์ธํธ์์ ๋ณด๊ดํ๋ค ์๋ฒ์ ์์ฒญ์ ํ ๋ ๋ง๋ค JWT๋ฅผ ๊ฐ์ด Request Header์ ์ ๋ฌํด์ฃผ๋ฉด
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ๊ฐ ์ค JWT์ ์๋ช ์ ์ฒดํฌํ๊ณ JWT์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์ธํ ๋ค
- ์ฌ๋ฐ๋ฅผ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ Request์ ๋ง๋ Response๋ฅผ ๋ฐํํ๊ณ , ๋ง์ง ์์ ๊ฒฝ์ฐ ๊ทธ์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
JWT ์ฅ์
- ์ฌ์ฉ์ ์ธ์ฆ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ ํ ํฐ ์์ฒด์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ธ์ฆ ์ ์ฅ์๊ฐ ํ์์๋ค.
- https://jwt.io/#debugger
- https://meetup.toast.com/posts/239
- https://bcho.tistory.com/999
- https://d2.naver.com/helloworld/24942
OAuth2 ๋ฅผ ์ ์ฌ์ฉํ๋?
- ๊ตฌ๊ธ์ด๋ ํ์ด์ค๋ถ ๊ตญ๋ด์์๋ ๋ค์ด๋ฒ๋ ์นด์นด์ค ๋ฑ ๋ก๊ทธ์ธํ๊ธฐ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด ๊ตฌํ์ ๋์ด๋๋ฅผ ๋ฎ์ถ ์ ์๊ณ ์ฌ์ฉ์ ์ธ์ฆ์ ๊ฐ์ํํ ์ ์๋ค.
- ๋ํ ๋ํ ๋ณด์ ์ฌ๊ณ ์ ์ํ์ ์ ๋ฌธ ์ธ๋ ฅ์ ๊ฐ์ถ๊ณ ์๋ ๊ฑฐ๋ ๊ธฐ์ ๋ค์๊ฒ ๋๊ธธ ์ ์๋ค.
- ๋ฌด์๋ณด๋ค ์ด๋ค ๊ธฐ์ ์ API๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด์๋ ์ธ์ฆ์ด ํ์ํ๋ฐ ์ค๋๋ ๋๋ถ๋ถ์ ๊ธฐ์ ๋ค์ด OAuth๋ฅผ ์ธ์ฆ์ผ๋ก ์ฑํํ๊ณ ์๋ค.
OAuth ๋ ๋ฌด์์ด๋ฉฐ Protocol flow์?
OAuth๋ ์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ค๋ฅธ ์น์ฌ์ดํธ ์์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ณตํต์ ์ธ ์๋จ์ผ๋ก์ ์ฌ์ฉ๋๋ ์ ๊ทผ ์์์ ์ํ ๊ฐ๋ฐฉํ ํ์ค(IEEE, ISOC, W3C, IETF ๋ฐ IAB ๊ณต๋ ์ ์)์ด๋ค
OAuth is an open standard for access delegation commonly used as a way for Internet users to grant websites or applications access to their information on other websites but without giving them the passwords.
Open Authorization์ด ๋์ค๊ฒ ๋ ๋ฐฐ๊ฒฝ
- OAuth๊ฐ ์ฌ์ฉ๋๊ธฐ ์ ์๋ ์ธ์ฆ๋ฐฉ์์ ํ์ค์ด ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๊ธฐ๋ณธ์ธ์ฆ์ธ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ ๋ณด์์ ์ทจ์ฝํ ๊ตฌ์กฐ์ด๋ค.
- ๊ธฐ๋ณธ ์ธ์ฆ์ด ์๋ ๊ฒฝ์ฐ๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด ๊ฐ์์ ๊ฐ๋ฐํ ํ์ฌ์ ๋ฐฉ๋ฒ๋๋ก ์ฌ์ฉ์๋ฅผ ํ์ธํ์๋ค.
- OAuth๋ ์ด๋ ๊ฒ ์ ๊ฐ๊ฐ์ธ ์ธ์ฆ๋ฐฉ์์ ํ์คํํ ์ธ์ฆ ๋ฐฉ์์ด๋ค.
- OAuth๋ฅผ ์ด์ฉํ๋ฉด ์ด ์ธ์ฆ์ ๊ณต์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ผ๋ฆฌ๋ ๋ณ๋์ ์ธ์ฆ์ด ํ์ ์๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
-
Resource Owner(์ฌ์ฉ์)๊ฐ Client(์ฐ๋ฆฌ ์๋ฒ)์๊ฒ ์ธ์ฆ ์์ฒญ์ ํฉ๋๋ค.
-
Client๋ Authorization Request๋ฅผ ํตํด Resource Owner์๊ฒ ์ธ์ฆํ ์๋จ(ex Facebook, Google ๋ก๊ทธ์ธ url)์ ๋ณด๋ ๋๋ค.
-
Resource Owner๋ ํด๋น Request๋ฅผ ํตํด ์ธ์ฆ์ ์งํํ๊ณ ์ธ์ฆ์ ์๋ฃํ๋ค๋ ์ ํธ๋ก Authorization Grant๋ฅผ url์ ์ค์ด Client์๊ฒ ๋ณด๋ ๋๋ค.
-
Client๋ ํด๋น ๊ถํ์ฆ์(Authorization Grant)๋ฅผ Authorization Server์ ๋ณด๋ ๋๋ค.
-
Authorization Server๋ ๊ถํ์ฆ์๋ฅผ ํ์ธ ํ, ์ ์ ๊ฐ ๋ง๋ค๋ฉด Client์๊ฒ Access Token, Refresh Token, ๊ทธ๋ฆฌ๊ณ ์ ์ ์ ํ๋กํ ์ ๋ณด(id ํฌํจ) ๋ฑ์ ๋ฐ๊ธํด์ค๋๋ค.
-
Client๋ ํด๋น Access Token์ DB์ ์ ์ฅํ๊ฑฐ๋ Resource Owner์๊ฒ ๋๊น๋๋ค.
-
Resource Owner(์ฌ์ฉ์)๊ฐ Resource Server์ ์์์ด ํ์ํ๋ฉด, Client๋ Access Token์ ๋ด์ Resource Server์ ์์ฒญํฉ๋๋ค.
-
Resource Server๋ Access Token์ด ์ ํจํ์ง ํ์ธ ํ, Client์๊ฒ ์์์ ๋ณด๋ ๋๋ค.
-
๋ง์ผ Access Token์ด ๋ง๋ฃ๋๊ฑฐ๋ ์์กฐ๋์๋ค๋ฉด, Client๋ Authorization Server์ Refresh Token์ ๋ณด๋ด Access Token์ ์ฌ๋ฐ๊ธ ๋ฐ์ต๋๋ค.
-
๊ทธ ํ ๋ค์ Resource Server์ ์์์ ์์ฒญํฉ๋๋ค.
-
๋ง์ผ Refresh token๋ ๋ง๋ฃ๋์์ ๊ฒฝ์ฐ, Resource Owner๋ ์๋ก์ด Authorization Grant๋ฅผ Client์๊ฒ ๋๊ฒจ์ผํฉ๋๋ค. (์ด๋ ๋ค์ ์ฌ์ฉ์๊ฐ ๋ค์ ๋ก๊ทธ์ธ ํ๋ผ๋ ๋ง์ ๋๋ค.)
OAuth2 ์น์ธ ๋ฐฉ์์ ์ข ๋ฅ
- Authorization Code Grant Type : ๊ถํ ๋ถ์ฌ ์ฝ๋ ์น์ธ ํ์
- ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์ ๋์ ํน์ ๋ฆฌ์์ค์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฆฌ์ค์ ์ ๊ทผ์ ์ํ ์ฌ์ฉ์ ๋ช ๊ณผ ๋น๋ฐ๋ฒํธ, ๊ถํ ์๋ฒ์ ์์ฒญํด์ ๋ฐ์ ๊ถํ ์ฝ๋๋ฅผ ํจ๊ป ํ์ฉํ์ฌ ๋ฆฌ์์ค์ ๋ํ ์์ธ์ค ํ ํฐ์ ๋ฐ๋ ๋ฐฉ์์ ๋๋ค.
- Implicit Grant Type : ์์์ ์น์ธ
- ๊ถํ ๋ถ์ฌ ์ฝ๋ ์น์ธ ํ์ ๊ณผ ๋ค๋ฅด๊ฒ ๊ถํ ์ฝ๋ ๊ตํ ๋จ๊ณ ์์ด ์์ธ์ค ํ ํฐ์ ์ฆ์ ๋ฐํ๋ฐ์ ์ด๋ฅผ ์ธ์ฆ์ ์ด์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
- Resource Owner Password Credentials Grant Type : ๋ฆฌ์์ค ์์ ์ ์ํธ ์๊ฒฉ ์ฆ๋ช ํ์
- ํด๋ผ์ด์ธํธ๊ฐ ์ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ธ์ค ํ ํฐ์ ๋ํ ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช ์ ๊ตํํ๋ ๋์ ๋๋ค.
- Client Credentials Grant Type : ํด๋ผ์ด์ธํธ ์๊ฒฉ ์ฆ๋ช ํ์
- ํด๋ผ์ด์ธํธ๊ฐ ์ปจํ ์คํธ ์ธ๋ถ์์ ์ก์ธ์ค ํ ํฐ์ ์ป์ด ํน์ ๋ฆฌ์์ค์ ์ ๊ทผ์ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
[์ฐธ๊ณ ]
[์ฝ์ด๋ณด๊ธฐ]
- OAuth2 4๊ฐ์ง ๋ฐฉ์ ์์ธ ๋ด์ฉ
[์ค์ต]
์จํ๋ก๋ฏธ์ค ํ๊ฒฝ๊ณผ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์ฐจ์ด ๋ฐ ์ฅ๋จ์
-
์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ฉด ์ธํ๋ผ ๊ด๋ฆฌ ๋ฐ ์ด์ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์ง์คํ ์ ์์ต๋๋ค.
-
AWS์์ ๋ชจ๋ ๊ฒ์ ๋์ ์ฒ๋ฆฌํ๋ฏ๋ก ์๋ฒ ํ๋ก๋น์ ๋์ด๋ ๊ตฌ์ฑ์ ๋ํด ๊ณ ๋ฏผํ ํ์๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ธํ๋ผ ๊ด๋ฆฌ ๋ถ๋ด์ด ์ค์ด๋ค๊ณ ์ ํ ์ถ์๋ฅผ ์๋น๊ธธ ์ ์์ต๋๋ค.
-
์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ๋ฐ๋ฅธ 4๊ฐ์ง ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋ฒ ๊ด๋ฆฌ ๋ถํ์
- ์๋ฒ๋ฅผ ํ๋ก๋น์ ๋ํ๊ฑฐ๋ ์ ์ง ๊ด๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. ์ค์น, ์ ์ง ๋๋ ๊ด๋ฆฌํ ์ํํธ์จ์ด๋ ๋ฐํ์์ด ์์ต๋๋ค.
์ ์ฐํ ํ์ฅ์ฑ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ผ๋ก ํ์ฅ๋ ์ ์๊ณ , ๊ฐ๋ณ ์๋ฒ ๋จ์๊ฐ ์๋๋ผ ์ฌ์ฉ ๋จ์(์: ์ฒ๋ฆฌ๋, ๋ฉ๋ชจ๋ฆฌ)๋ฅผ ์ค์ /ํด์ ํ์ฌ ์ฉ๋์ ์กฐ์ ํ ์๋ ์์ต๋๋ค.
๊ณ ๊ฐ์ฉ์ฑ
- ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด์ฅ๋ ๊ฐ์ฉ์ฑ๊ณผ ๋ด๊ฒฐํจ์ฑ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ์๋น์ค์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ค๊ณํ ํ์๊ฐ ์์ต๋๋ค.
์ ํด ์ฉ๋ ์์
- ์ ํด ์ฉ๋์ ๋ํ ๋น์ฉ์ ์ง๋ถํ ํ์๊ฐ ์์ต๋๋ค.
- ์ปดํจํ ์ด๋ ์คํ ๋ฆฌ์ง ๋ฑ์ ์ฉ๋์ ์ฌ์ ํ๋ก๋น์ ๋ํ๊ฑฐ๋ ์ค๋ฒ ํ๋ก๋น์ ๋ํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฝ๋๊ฐ ์คํ๋์ง ์์ ๋๋ ๋น์ฉ์ด ๋ถ๊ณผ๋์ง ์์ต๋๋ค.
https://www.slideshare.net/awskorea/aws-aws-aws-101-webinar