Home - RWB0104/api.itcode.dev-oauth2 GitHub Wiki
์ด ๋ฌธ์๋ OAuth2.0 ํ๋ก์ ํธ ์ธ์ฆ์๋ฒ์ API ๋ช ์ธ์์.
์ ๊ณตํ๋ API๋ ์๋์ ๊ฐ์.
-
AgreementAPI
/oauth2/api/agreement
- ์ ๋ณด ์ ๊ณต ๋์ API -
LoginAPI
/oauth2/api/login
- ๋ก๊ทธ์ธ API -
LogoutAPI
/oauth2/api/logout
- ๋ก๊ทธ์์ API -
RevokeAPI
/oauth2/api/revoke
- ์ฐ๋ ํด์ API -
UserInfoAPI
/oauth2/api/userinfo
- ์ฌ์ฉ์ ์ ๋ณด API
๋ก๊ทธ์ธ API
/oauth2/api/login
API_KEY
, SECRET_KEY
, CALLBACK_URL
์ ํตํด ํ๋ซํผ ๋ก๊ทธ์ธ URL์ ๋ฐํํ๋ค.
ํ๋ซํผ ๋ก๊ทธ์ธ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์์ผ ๊ฒฝ์ฐ code
๋ฅผ, ๋น์ ์์ผ ๊ฒฝ์ฐ error
๋ฅผ URL ํ๋ผ๋ฏธํฐ๋ก ๋ด์ CALLBACK_URL
๋ก ๋ฆฌ๋ค์ด๋ ์
ํ๋ค.
GET https://api.itcode.dev/oauth2/api/login/{:platform}
parameter | type | data | required | description |
---|---|---|---|---|
{:platform} | path | String |
Y | ํ๋ซํผ (์๋ฌธ์ ํ๊ธฐ) |
{
"flag": true,
"title": "success",
"message": "naver authrorization url response success",
"body": "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=czCaqAOB1aAjNRk6N_Oq&redirect_uri=https%3A%2F%2Fproject.itcode.dev%2Foauth2%2Fcallback%3Fplatform%3Dnaver&state=b73ed0eb-abcc-4f95-b1d9-d52623e90946"
}
์ ์๋ต์ https://api.itcode.dev/oauth2/api/login/naver
์ ์์๋ค.
parameter | data | description |
---|---|---|
flag | boolean |
๋์ ๊ฒฐ๊ณผ |
title | String |
์ ๋ชฉ |
message | String |
๋ด์ฉ |
body | String |
ํ๋ซํผ ๋ก๊ทธ์ธ URL |
์ ๋ณด ์ ๊ณต ๋์๋ฅผ ์ฌ์ ํํ ์ ์๋ URL์ ์์ฑํ์ฌ ๋ฐํํ๋ API.
์ฌ๋์๊ฐ ์ด๋ฃจ์ด์ง ํ ๋ค์ ํ ๋ฒ ๋ก๊ทธ์ธ ๊ณผ์ ์ ๊ฑฐ์ณ ๊ฐฑ์ ๋ ๋ด์ฉ์ด ๋ฐ์๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ค์ ์์ฑํ๋ค.
์ง์ํ๋ ํ๋ซํผ์ ์๋ ๋ ํ๋ซํผ์ด๋ค.
- NAVER - ํ์, ์ถ๊ฐ ์ ๋ณด์ ๊ด๊ณ์์ด ์์๋ก ํ๊ฐ/๊ฑฐ๋ถ๊ฐ ๊ฐ๋ฅํจ
- KAKAO - ์ถ๊ฐ์ ํด๋นํ๋ ์ ๋ณด๋ง ํ๊ฐ/๊ฑฐ๋ถ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์ด๋ฏธ ํ๊ฐํ ์ ๋ณด๋ ๊ฑฐ๋ถ ๋ถ๊ฐ
Google์ ๊ฒฝ์ฐ, ์์ฒญํ๋ ์ ๋ณด๊ฐ ํ๋กํ ์ ๋ณด๋ฅผ ๋ฒ์ด๋์ง ์์ผ๋ฏ๋ก ๋ณ๋์ ๋์ ๊ณผ์ ์ด ์์ด์ ์๋ฏธ๊ฐ ์๋ค.
GitHub์ ๊ฒฝ์ฐ, OAuth ์ฑ์ ํ๋กํ ์ ๋ณด๋ง์ ๊ฐ์ ธ์ค๋ฏ๋ก ๋ณ๋์ ๋์ํญ๋ชฉ์ด ์๋ค.
PUT https://api.itcode.dev/oauth2/api/login/put
Cookie: access={:access};
parameter | type | data | required | description |
---|---|---|---|---|
{:access} | Cookie | String |
Y | ์ธ์ฆ ์ฟ ํค |
{
"flag": true,
"title": "success",
"message": "naver reauthrorization url response success",
"body": "https://nid.naver.com/oauth2.0/authorize?auth_type=reprompt&state=08199e0e-ef61-444a-8d4f-f3c048b771f0&response_type=code&client_id=czCaqAOB1aAjNRk6N_Oq&redirect_uri=https%3A%2F%2Fproject.itcode.dev%2Foauth2%2Fcallback%3Fplatform%3Dnaver"
}
์ ์๋ต์ https://api.itcode.dev/oauth2/api/login/put
์ ์์๋ค.
parameter | data | description |
---|---|---|
flag | boolean |
๋์ ๊ฒฐ๊ณผ |
title | String |
์ ๋ชฉ |
message | String |
๋ด์ฉ |
body | String |
์ ๋ณด ์ ๊ณต ๋์ ๊ฐฑ์ URL URL |
ํ๋ซํผ ๋ก๊ทธ์ธ ๊ฒฐ๊ณผ๋ก ๋ฐ๊ธ๋ฐ์ code
๋ฅผ Access Token์ผ๋ก ๊ตํํ์ฌ ์๋น์ค ์ธ์ฆ ํ ํฐ์ ์์ฑํ๋ API.
์์ฑํ ์ธ์ฆ ํ ํฐ์ ์ฟ ํค์ ์ ์ฅํ์ฌ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
Access Token๊ณผ Refresh Token์ JWT๋ก ๋ณํํ์ฌ ์ ๊ณตํ๋ฉฐ, ์ธ์ฆ์ด ํ์ํ ๊ฐ์ข ์์ฒญ์ ํด๋น ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ค.
POST https://api.itcode.dev/oauth2/api/login/{:platform}
{
"code": {:code},
"state": {:state}
}
parameter | type | data | required | description |
---|---|---|---|---|
{:platform} | path | String |
Y | ํ๋ซํผ (์๋ฌธ์ ํ๊ธฐ) |
{:code} | body | String |
Y | ์ ๊ทผ ์ฝ๋ |
{:state} | body | String |
Y | ๊ณ ์ ์ํ๊ฐ |
{
"flag": true,
"title": "success",
"message": "authorized success",
"body": null
}
# Header
Set-Cookie: access={access JWT}
Set-Cookie: refresh={refresh JWT}
Set-Cookie
ํค๋๋ฅผ ํตํด ์ธ์ฆ ์ฟ ํค๋ฅผ ์์ฑํ๋ค.
parameter | data | description |
---|---|---|
flag | boolean |
๋์ ๊ฒฐ๊ณผ |
title | String |
์ ๋ชฉ |
message | String |
๋ด์ฉ |
body | null |
null |
access, refresh ์ฟ ํค๋ฅผ ๊ฒ์ฆํ์ฌ ์ ํจํ ๊ฒฝ์ฐ ์๋๋ก๊ทธ์ธ์ ์งํํ๋ API.
์ฟ ํค์ ๋ณด๊ด ์ฌ๋ถ์ ๋ฐ๋ผ ๋งค์ปค๋์ฆ์ด ๋ฌ๋ผ์ง๋ค.
access ์ฟ ํค๋ฅผ ๋ณด์ ํ๊ณ ์์ ๊ฒฝ์ฐ, ์ด๋ฏธ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณด์ ํ๊ณ ์๋ ์ ์ด๋ฏ๋ก ๋ณ๋ค๋ฅธ ๋์์ ์ํํ์ง ์์ผ๋ฉฐ ์ฆ์ ํ์ผ๋ก ๋ฆฌ๋ค์ด๋ ์ ์ํจ๋ค. ์ด ๋ refresh ํ ํฐ์ ์ ๋ฌด๋ ์ ๊ฒฝ์ฐ์ง ์๋๋ค.
refresh ์ฟ ํค๋ง ๋ณด์ ํ๊ณ ์์ ๊ฒฝ์ฐ, Access Token์ ๊ฐฑ์ ํ์ฌ ๋ก๊ทธ์ธ ์ ์ฐจ๋ฅผ ์ํํ๋ค. ์ด ๋ Set-Cookie
ํค๋๋ฅผ ํตํด ์๋ก์ด ์ธ์ฆ ์ ๋ณด๋ฅผ ์์ฑํ๋ค.
POST https://api.itcode.dev/oauth2/api/login/auto
Cookie: access={:access}; refresh={:refresh};
parameter | type | data | required | description |
---|---|---|---|---|
{:access} | Cookie | String |
N | ์ธ์ฆ ์ฟ ํค |
{:refresh} | Cookie | String |
Y | ๋ฆฌํ๋ ์ฌ ์ฟ ํค |
{
"flag": true,
"title": "success",
"message": "auto authorized success",
"body": null
}
# Header
Set-Cookie: access={access JWT}
Set-Cookie: refresh={refresh JWT}
refresh ์ฟ ํค๋ง์ ๋ณด์ ํ๊ณ ์์ด์ Access Token์ ๊ฐฑ์ ํ ๊ฒฝ์ฐ์๋ง Set-Cookie
๊ฐ ํฌํจ๋๋ค.
parameter | data | description |
---|---|---|
flag | boolean |
๋์ ๊ฒฐ๊ณผ |
title | String |
์ ๋ชฉ |
message | String |
๋ด์ฉ |
body | null |
null |
๋ก๊ทธ์์ API
/oauth2/api/logout
๋ก๊ทธ์์์ ์ํํ๋ API.
access, refresh ์ฟ ํค๋ฅผ ์ญ์ ํ๋ค.
POST https://api.itcode.dev/oauth2/api/logout
{
"flag": true,
"title": "success",
"message": "logout success",
"body": null
}
# Header
Set-Cookie: access={access JWT}
Set-Cookie: refresh={refresh JWT}
parameter | data | description |
---|---|---|
flag | boolean |
๋์ ๊ฒฐ๊ณผ |
title | String |
์ ๋ชฉ |
message | String |
๋ด์ฉ |
body | null |
null |
Max-Age
0์ธ ์ฟ ํค๋ก ๋ง๋ค์ด Set-Cookie
๋ก ๋ฎ์ด์์ ์ญ์ ํ๋ค.
์ฐ๋ ํด์ API
/oauth2/api/revoke
ํ๋ซํผ ์ฐ๋์ ํด์ ํ์ฌ ๊ด๋ จ ์ ๋ณด์ ์ ๋ณด ์ ๊ณต ๋์ ๋ด์ญ์ ์ ๋ถ ์ญ์ ํ๋ API.
์ถํ ๋ค์ ์๋น์ค์ ๋ก๊ทธ์ธ์ ์ํํ๋ฉด, ์ด์ ์ ๋ณด๋ค์ด ๋ชจ๋ ํ๊ธฐ๋๊ธฐ ๋๋ฌธ์ ์ฝ๊ด ๋ฐ ์ ๋ณด ์ ๊ณต ๋์๋ฅผ ๋ค์ ์ํํด์ผํ๋ค.
ํ๋ซํผ ์ฐ๋ ํด์ ํ ๋ก๊ทธ์์์ ์งํํ๋ฉฐ, ํ๋ฉด์ ์ธ ๋์์ ๋ก๊ทธ์์ ๋์๊ณผ ์์ ํ ๋์ผํ๋ค.
DELETE https://api.itcode.dev/oauth2/api/revoke
Cookie: access={:access};
parameter | type | data | required | description |
---|---|---|---|---|
{:access} | Cookie | String |
Y | ์ธ์ฆ ์ฟ ํค |
{
"flag": true,
"title": "success",
"message": "logout success",
"body": null
}
# Header
Set-Cookie: access={access JWT}
Set-Cookie: refresh={refresh JWT}
parameter | data | description |
---|---|---|
flag | boolean |
๋์ ๊ฒฐ๊ณผ |
title | String |
์ ๋ชฉ |
message | String |
๋ด์ฉ |
body | null |
null |
์ฌ์ฉ์ ์ ๋ณด API
/oauth2/api/userinfo
Access Token์ ํตํด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ๋ฌ๋ฐ๋ API.
์ด ๋ ์ ๋ฌ๋ฐ๋ ์ ๋ณด๋ ์ฒซ ๋ก๊ทธ์ธ ์ ์ ๊ณต ๋์ํ ์ ๋ณด๋ง์ ๊ฐ์ ธ์จ๋ค.
ํ๋ซํผ๋ง๋ค ์ ๋ฌํด์ฃผ๋ ๋ฐ์ดํฐ์ ์คํค๋ง์ ํ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ธ์ฆ ์๋ฒ์์ ์ด๋ฅผ ์ ์ ํ ๊ฐ๊ณตํ์ฌ ์ผ๊ด๋ ํํ์ ์๋ต์ผ๋ก ๋ฐํํ๋ค.
GET https://api.itcode.dev/oauth2/api/userinfo
Cookie: access={:access};
parameter | type | data | required | description |
---|---|---|---|---|
{:access} | Cookie | String |
Y | ์ธ์ฆ ์ฟ ํค |
{
"flag": true,
"title": "success",
"message": "user info response success",
"body": {
"email": "[email protected]",
"name": "name",
"profile": "https://phinf.pstatic.net/contact/PROFILE.png",
"platform": "naver"
}
}
์ ์๋ต์ ๋ค์ด๋ฒ ์ฌ์ฉ์ ์ ๋ณด ์๋ต์ ์์๋ค.
parameter | data | description |
---|---|---|
flag | boolean |
๋์ ๊ฒฐ๊ณผ |
title | String |
์ ๋ชฉ |
message | String |
๋ด์ฉ |
body | Object |
์ฌ์ฉ์ ์ ๋ณด JSON |
String |
์ด๋ฉ์ผ | |
name | String |
์ด๋ฆ |
profile | String |
ํ๋กํ ์ฌ์ง URL |
platform | String |
ํ๋ซํผ |