OAuth๋?
OAuth๋ ์์ ์์ ์(๊ตฌ๊ธ, ์นด์นด์ค, ํ์ด์ค๋ถ, ์ฌ๋)์ HTTP ์๋น์ค ๊ฐ์ ์น์ธ ์ํธ ์์ฉ์ ์กฐ์ ํ๊ฑฐ๋ ์ 3์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์ค๋ก ์ก์ธ์ค๋ฅผ ์ป์์ผ๋ก์จ ์์ ์์ ์์ ์๋น์ค์ ๋ํ ์ ํ๋ ์ก์ธ์ค๋ฅผ ์ป์ ์ ์๋ ์ธ์ฆ ํ๋ ์์ํฌ์ด๋ค.
ํํ ๋ณผ ์ ์๋ ๊ตฌ๊ธ ๋ก๊ทธ์ธ, ์นด์นด์ค ๋ก๊ทธ์ธ์ OAuth๋ฅผ ํตํด์ ํด๋น ์๋น์ค์ ๊ฐ์ ํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ผ๋ จ์ ๊ณผ์ ์ ํตํด์ ์ 3์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๊ทผํ ์ ์๋๋ก ํด์ ํ์๊ฐ์ ์ ์๋ตํ๊ณ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ๋ ์๋ค.
๋ํ OAuth์ ์ฌ๋์์ ์ ๊ณตํ๋ api๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋์ด ์๋ ๋ด๊ฐ ๋ง๋ ์น์์ ์ฌ๋์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ๋ฑ ์์ ์์ ์๊ฐ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์ 3์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ ์๋ ์๋ค.
OAuth๋ ํฌ๊ฒ Access Token๊ณผ Scope๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
Slack API์์ OAuth๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ OAuth๋ฅผ ํตํด์ ์ป์ Access Token์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
Slack์์ OAuth๋ก Access Token ๋ฐ๊ธฐ
์์ ์์ ์์ ์์(์๋น์ค)๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ Access Token์ด ํ์ํ๋ฐ, ์ฌ๋์์ OAuth๋ฅผ ์ฌ์ฉํด์ api๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
- scope์ ๋ํ ์์ฒญ์ ํ๋ฉด code๋ฅผ ๋ฐํํ๋ค.
- ๋ฐ์ code๋ฅผ ํตํด์ access token์ ๊ตํ ๋ฐ๋๋ค.
- ๋ฐ์ access token์ ์ด์ฉํด slack api๋ฅผ ์ฌ์ฉํ๋ค.
oauth/v2/authorize
๋จผ์ ์ด๋ค ์ฌ์ฉ์๊ฐ ์ด๋ค ์๋น์ค๋ฅผ ์ด์ฉํ ์ง์ ๋ํด์ ์ ํ๊ณ ์ด์๋ํ code๋ฅผ ๋ฐ๋ api ์ด๋ค. ์ด ๊ณผ์ ์์ ์ฌ์ฉ์๋ ํด๋น ์๋น์ค์ ๋ก๊ทธ์ธ์ ํ๊ฒ๋๊ณ , ์ฌ์ฉํ๊ฒ ๋ ๊ถํ์ ๋ํด์ ์๋ด๋ฅผ ๋ฐ๊ณ ๋์๋ฅผ ํ๊ฒ ๋๋ค.(Authorization Request)
์์ ์์ ์๋ ํด๋น ์์ฒญ(Authrization Request)์ ๋ฐ์์ ํ์ธ์ ํ๊ณ ์ ํจํ ์์ฒญ์ด๋ผ๋ฉด ์ด๋ฅผ ์น์ธํ๊ณ ์ผ๋ จ์ ์ฝ๋๋ฅผ ๋ณด๋ด๊ฒ ๋๋ค.(Authorization Grant)
https://slack.com/oauth/v2/authorize?scope=incoming-webhook,commands&client_id=3336676.569200954261&redirect_uri=example.com
scope - ์ฌ์ฉํ api๊ฐ ์๊ตฌํ๋ scope๋ค(๊ถํ)
client_id - ์ฌ์ฉํ๋ ค๋ ์ํฌ์คํ์ด์ค์ ์ฑ์ ๋ง๋ค๋ฉด ์ป์ ์ ์๋ค.
redirect_uri - ํด๋น ์์ฒญ์ด ์๋ฃ๋๋ฉด redirect๋ ์ฃผ์
์ฌ์ฉ์๊ฐ ์ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ฌ๋ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ฒ ๋๊ณ , ๋ก๊ทธ์ธ์ ํ๊ฒ๋๋ฉด, ํด๋น scope์ ๋ํ ์๋ด๋ฅผ ๋ฐ๊ณ ํ์ฉํ๋ ํ๋ฉด์ด ๋์ค๊ฒ ๋๋ค.
์ ๊ณผ์ ์ ํตํด ์ฌ์ฉ์์ ๋ก๊ทธ์ธ๊ณผ ํ๊ฐ๋ฅผ ๋ฐ๊ฒ ๋๋ฉด redirect_uri๋ก ๋ฆฌ๋ค์ด๋ ํธ๋๋ค.
oauth.v2.access
oauth/v2/authorize๊ณผ์ ์ด ์๋ฃ๋๋ฉด ์ฝ๋์ ํจ๊ป ๋ฆฌ๋ค์ด๋ ํธ ๋๋๋ฐ, ์ด๋ ํด๋น ์ปจํธ๋กค๋ฌ์์ ํ ํฐ์ ๊ตํํ๋ ๋ก์ง์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด๋๋ค.
curl -F code=1234 -F client_id=3336676.569200954261 -F client_secret=ABCDEFGH https://slack.com/api/oauth.v2.access
code - oauth/v2/authorize์์ ๋ฐ์ ์์ ๊ถํ ์ฝ๋
client_id, client_secret - ์ฑ์ ๋ง๋ค๋ฉด ์ป์ ์ ์๋ ์ฝ๋(๊ถํ์ ์์ฒญํ ์ํฌ์คํ์ด์ค ์ฑ)
์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋์ ๊ฐ์ response๋ฅผ ๋ฐ์ ์ ์๊ณ , ๋ด๊ฐ ์์ฒญํ ๊ถํ๊ณผ ๊ทธ์ ๋ง๋ access_token์ ๋ฐ์ ์ ์๊ณ ์ด๋ฅผ ์ฌ์ฉํด์ ์ฌ๋ api๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
{
"ok": true,
"access_token": "xoxb-17653672481-19874698323-pdFZKVeTuE8sk7oOcBrzbqgy",
"token_type": "bot",
"scope": "commands,incoming-webhook",
"bot_user_id": "U0KRQLJ9H",
"app_id": "A0KRD7HC3",
"team": {
"name": "Slack Softball Team",
"id": "T9TK3CUKW"
},
"enterprise": {
"name": "slack-sports",
"id": "E12345678"
},
"authed_user": {
"id": "U1234",
"scope": "chat:write",
"access_token": "xoxp-1234",
"token_type": "user"
}
}
๋ง๋ฌด๋ฆฌ
์ฌ์ค ํ์ฌ์์ ์ฌ๋ด ์์คํ ์์ ์ฌ๋ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์กํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฒ ๋์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ์ ๋ฆฌํ ๋ฌธ์์ด๋ค ๋ณด๋ ๋ด๊ฐ ์ดํดํ๊ณ ์ฌ์ฉํ? ๋ถ๋ถ๋ง ์ ์ ๊ฒ ๊ฐ๋ค… ๊ณต์ ๋ฌธ์๊ฐ ๋๋ฌด ์์ธํ ์ ์ ๋ฆฌ๋์ด ์์ด์ ๋ถ์กฑํ ๋ถ๋ถ์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๊ณ ๊ตฌํํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด์ slack api ๊ณต์๋ฌธ์์ oauth2 ๊ณต์๋ฌธ์๋ฅผ ์์ฒญ ๋ง์ด ๋ดค๋ค. ์ ์ฌ๋๋ค์ด ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๊ณ ๊ฐ๋ฐํ๋์ง ์๊ฒ๋์๋ค. ๋ด๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ๋๊ฐ์ด ๊ตฌํํ ๋ธ๋ก๊ทธ๋ ์กด์ฌํ์ง ์๋๋ค…๋ก๊ทธ์ธ๋ฐ์ ์๋ค…
์ฐธ๊ณ ์๋ฃ
slack oauth2 - https://api.slack.com/authentication/oauth-v2
slack sign in with slack - https://api.slack.com/authentication/sign-in-with-slack
OAuth - https://oauth.net/2/
'Back-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ElastAlert (1) | 2024.06.09 |
---|---|
์น์๋ฒ(Web Server)์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ(Web Application Server) (0) | 2023.06.25 |
[HTTP] ์๋ต ์ํ ์ฝ๋ ์ ๋ฆฌ (0) | 2021.09.14 |
[REST API]REST API๋? (0) | 2021.08.29 |
[WEB] HTTPS์ SSL์ธ์ฆ์ (0) | 2021.08.29 |