๐ ์๋ฆฌ์ค ๋ก๊ทธ์ธ ์ฐ๋ ๊ฐ๋ฐ ๊ฐ์ด๋
์ด ๋ฌธ์๋ ์๋ฆฌ์ค์ OAuth ๊ธฐ๋ฐ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฐ๋ํ๊ธฐ ์ํ ๊ฐ๋ฐ์ ์ฐจ๋ฅผ ์๋ดํฉ๋๋ค.
1. ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋กโ
์๋ฆฌ์ค ๋ก๊ทธ์ธ์ ์ฐ๋ํ๊ธฐ ์ํด์๋ ๋จผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ๊ณผ Redirect URI ๋ฅผ ๋ฑ๋กํด์ผ ํฉ๋๋ค. backend@elicer.com ๋ฉ์ผ๋ก ์๋ ์ ๋ณด๋ฅผ ๋ณด๋ด์ฃผ์๋ฉด ๋ด๋ถ์์ ๋ฑ๋ก ํ ์๋ด๋๋ฆฌ๊ฒ ์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ
- Redirect URI (์ต๋ 5๊ฐ, https ํ์)
- ๋ก๊ทธ์ธ ์๋ฃ ์ดํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์๋ณผ ํ์ด์ง์ ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค. (์์: https://my-site.com/elice/ouath/okay)
๋ด๋ถ ๋ฑ๋ก ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ํ ์๋์ ์ ๋ณด๋ฅผ ์๋ดํด๋๋ฆฝ๋๋ค.
- client_id
- client_secret
- ELICE_WEB_URL (๊ฐ๋ฐ)
- ELICE_SERVER_URL (๊ฐ๋ฐ)
- ELICE_WEB_URL (์ด์)
- ELICE_SERVER_URL (์ด์)
2. ์๋ฆฌ์ค ๋ก๊ทธ์ธ ์ฐ๋ URL ์์ฑํ๊ธฐโ
์๋ฆฌ์ค ๋ก๊ทธ์ธ ์ฐ๋ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์๋ฆฌ์ค ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋์ํค๊ธฐ ์ํ API ํธ์ถ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํฉ๋๋ค.
์๋์ ์์ฒญ ๋ณ์๋ฅผ ์ฑ์ API ๋ฅผ ํธ์ถํ๋ฉด ์ฌ์ฉ์๋ ์๋ฆฌ์ค ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋ฉ๋๋ค.
ํด๋น ๋ก๊ทธ์ธ ํ๋ฉด์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์๋ฃํ๋ฉด ๊ฒฐ๊ณผ์ ํจ๊ป Redirect URI ๋ก ๋ค์ ๋ฆฌ๋ค์ด๋ ํธ ๋ฉ๋๋ค.
์์ฒญ URL ์ ๋ณด
๋ฉ์๋ | ์์ฒญ URL | ์๋ต ํํ | ์ค๋ช |
---|---|---|---|
GET | https://{ELICE_WEB_URL}/oauth/authorize | URL ๋ฆฌ๋ค์ด๋ ํธ | ์๋ฆฌ์ค ๋ก๊ทธ์ธ ์ธ์ฆ ์์ฒญ |
์์ฒญ ๋ณ์ ์ ๋ณด
์์ฒญ ๋ณ์๋ช | ํ์ | ํ์ ์ฌ๋ถ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|---|
client_id | string | Y | - | ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก ์ ๋ฐ๊ธ๋ฐ์ Client ID ๊ฐ |
redirect_uri | string | Y | - | ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก ์ ์ ๋ ฅํ Redirect URI ๊ฐ ์ค ํ๋ (URL ์ธ์ฝ๋ฉ ์ ์ฉ ํ์) |
state | string | Y | - | ๋ณด์์ ์ํด ๋งค๋ฒ ์๋กญ๊ฒ ์์ฑํ๋ ๋๋คํ ๋ฌธ์์ด ๊ฐ |
scope | string | Y | read | ์ฝค๋ง๋ก ๊ตฌ๋ถ๋๋ ๊ถํ์ ๋ชฉ๋ก |
lang | string | Y | ko | ์ฌ์ฉ ์ธ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ฐ |
์์ฒญ๋ฌธ ์์
curl -X GET "https://\{ELICE_WEB_URL\}/oauth/authorize?client_id=myclientid&redirect_uri=redirect_uri=https%3A%2F%2Fmy-site.com%2Felice%2Fouath%2Fokay&state=om22bsq0jz&scope=read&lang=ko"
์๋ต ์์
HTTP/1.1 302 Found
Location: https://my-site.com/elice/ouath/okay?code=okaycode12345&state=om22bsq0jz
3. ์ ๊ทผ ํ ํฐ ๋ฐ๊ธ ์์ฒญโ
Redirect URI ๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋๋ฉฐ ์ฟผ๋ฆฌ ์คํธ๋ง์ ํตํด ์ ๋ฌ๋ฐ์ ์ธ์ฆ ์ฝ๋(code)๋ ์ ๊ทผ ํ ํฐ(access token)์ ๋ฐ๊ธ๋ฐ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ธ์ฆ ์ฝ๋๋ ์ผํ์ฉ์ด๋ฉฐ, ์ ๊ทผ ํ ํฐ์ 1ํ ๋ฐ๊ธํ๋๋ฐ ์ฌ์ฉ๋ ํ ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ ๊ทผ ํ ํฐ์ ์ดํ ์ ์ ์ ๋ณด API ๋ฑ ์๋ฆฌ์ค REST API ๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ด API ๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์๋ฒ์์ ์คํ๋์ด์ผ ํฉ๋๋ค.
์์ฒญ URL ์ ๋ณด
๋ฉ์๋ | ์์ฒญ URL | ์๋ต ํํ | ์ค๋ช |
---|---|---|---|
POST | https://{ELICE_SERVER_URL}/oauth/token | json | ์ ๊ทผ ํ ํฐ ๋ฐ๊ธ ์์ฒญ |
์์ฒญ ๋ณ์ ์ ๋ณด
์์ฒญ ๋ณ์๋ช | ํ์ | ํ์ ์ฌ๋ถ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
---|---|---|---|---|
client_id | string | Y | - | ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก ์ ๋ฐ๊ธ๋ฐ์ Client ID ๊ฐ |
client_secret | string | Y | - | ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก ์ ๋ฐ๊ธ๋ฐ์ Client Secret ๊ฐ |
code | string | Y | - | Redirect URI ๋ฅผ ํตํด ์ ๋ฌ ๋ฐ์ ์ธ์ฆ ์ฝ๋ ๊ฐ |
์์ฒญ๋ฌธ ์์
curl -X POST "https://\{ELICE_SERVER_URL\}/oauth/token" \
-H "Content-Type: application/json" \
-d '{"client_id":"myclientid","client_secret":"myclientsecret","code": "okaycode12345"}'
์๋ต ์ ๋ณด
ํ๋ | ํ์ | ์ค๋ช |
---|---|---|
access_token | string | ์ ๊ทผ ํ ํฐ (๋ฐ๊ธ์ผ๋ก๋ถํฐ 1์๊ฐ ์ดํ ๋ง๋ฃ) |
์๋ต ์์โ
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "your_access_token"
}
4. ์ ๊ทผ ํ ๊ทผ์ ์ด์ฉํ์ฌ ์ ์ ์ ๋ณด API ํธ์ถํ๊ธฐโ
์ ๊ทผ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ ์ ์ ๋ณด ์กฐํ API๋ฅผ ํธ์ถ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
์์ฒญ URL ์ ๋ณด
๋ฉ์๋ | ์ธ์ฆ | ์์ฒญ URL | ์๋ต ํํ | ์ค๋ช |
---|---|---|---|---|
GET | OAuth2.0 | https://{ELICE_SERVER_URL}/oauth/account | JSON | ์ ์ ์ ๋ณด ์กฐํ |
์์ฒญ ๋ณ์ ์ ๋ณด
์์ฒญ ๋ณ์๋ ๋ณ๋๋ก ์์ผ๋ฉฐ, ์์ฒญ URL๋ก ํธ์ถํ ๋ ์๋์ ๊ฐ์ด ์์ฒญ ํค๋์ ์ ๊ทผ ํ ํฐ ๊ฐ์ ์ ๋ฌํ๋ฉด ๋ฉ๋๋ค.
์์ฒญ ํค๋
์์ฒญ ํค๋๋ช | ์ค๋ช |
---|---|
Authorization | ๋ค์ ํํ์ ๊ฐ : Bearer {์ ๊ทผ ํ ํฐ} |
์์ฒญ๋ฌธ ์์
curl -X GET "https://\{ELICE_SERVER_URL\}/oauth/account" \
-H "Authorization: Bearer your_access_token"
์๋ต ์ ๋ณด
ํ๋ | ํ์ | ํ์ ์ฌ๋ถ | ์ค๋ช |
---|---|---|---|
id | String | Y | ๋์ผ์ธ ์๋ณ ์ ๋ณด |
fullname | String | Y | ์ฌ์ฉ์ ์ด๋ฆ |
String | Y | ์ฌ์ฉ์ ๋ฉ์ผ ์ฃผ์ | |
phone | String | Y | ์ฌ์ฉ์ ํด๋์ ํ๋ฒํธ |
profile_url | String | Y | ์ฌ์ฉ์ ํ๋กํ ์ฌ์ง URL |
locale | String | Y | ์ฌ์ฉ์ ์ง์ญ์ ๋ณด |
์๋ต ์์โ
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 12345,
"fullname": "John Doe",
"email": "john.doe@example.com",
"phone": "010-1234-5678",
"profile_url": "https://example.com/profile/johndoe",
"locale": "ko"
}