ํ ํฐ ๋ง๋ฃ ์ฒ๋ฆฌ์ ๋ณด์ ์ฌ๊ณ ๋์
ํ ํฐ ๋ง๋ฃ ์ฒ๋ฆฌ์ ๋ณด์ ์ฌ๊ณ ๋์
1. ํ ํฐ ๋ง๋ฃ ์ฒ๋ฆฌ ์ ๋ต
- Access Token ์ ์ผ๋ฐ์ ์ผ๋ก ์งง์ ์ ํจ ์๊ฐ ์ ๊ฐ์ง๋ฉฐ, ์ผ์ ์๊ฐ ํ ๋ง๋ฃ๋ฉ๋๋ค.
- Refresh Token ์ ์ฌ์ฉํด ์๋ก์ด Access Token์ ๋ฐ๊ธ๋ฐ๋ ๋ก์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค.
Access Token ๋ง๋ฃ ์ ์ฒ๋ฆฌ ์์
import requests
def get_new_access_token(refresh_token):
response = requests.post(
"https://api.example.com/oauth/token",
data={
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"client_id": "your_client_id",
"client_secret": "your_client_secret"
}
)
return response.json().get("access_token")
refresh_token = "your_refresh_token"
new_access_token = get_new_access_token(refresh_token)
print(f"์๋ก์ด Access Token: {new_access_token}")
ํ ํฐ ๋ง๋ฃ ์ฒ๋ฆฌ์ ๋ณด์ ์ฌ๊ณ ๋์
1. ํ ํฐ ๋ง๋ฃ ์ฒ๋ฆฌ ์ ๋ต
- Access Token ์ ์ผ๋ฐ์ ์ผ๋ก ์งง์ ์ ํจ ์๊ฐ ์ ๊ฐ์ง๋ฉฐ, ์ผ์ ์๊ฐ ํ ๋ง๋ฃ๋ฉ๋๋ค.
- Refresh Token ์ ์ฌ์ฉํด ์๋ก์ด Access Token์ ๋ฐ๊ธ๋ฐ๋ ๋ก์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค.
Access Token ๋ง๋ฃ ์ ์ฒ๋ฆฌ ์์
import requests
def get_new_access_token(refresh_token):
response = requests.post(
"https://api.example.com/oauth/token",
data={
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"client_id": "your_client_id",
"client_secret": "your_client_secret"
}
)
return response.json().get("access_token")
refresh_token = "your_refresh_token"
new_access_token = get_new_access_token(refresh_token)
print(f"์๋ก์ด Access Token: {new_access_token}")
์ค๋ช : ๋ง๋ฃ๋ Access Token์ Refresh Token ์ ํตํด ์๋ก ๋ฐ๊ธ๋ฐ๋ ์์ ์ ๋๋ค.
2. ๋ณด์ ์ฌ๊ณ ๋ฐ์ ์ ๋์
- Refresh Token ์ ์ถ ์ : ๋ชจ๋ Access Token๊ณผ Refresh Token์ ์ฆ์ ๋ง๋ฃ ํ๊ณ ์ฌ๋ฐ๊ธํด์ผ ํฉ๋๋ค.
- ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฌ์ฉ : ํ ํฐ์ด ๋ง๋ฃ๋๊ฑฐ๋ ์ ์ถ๋ ๊ฒฝ์ฐ, ๋ธ๋๋ฆฌ์คํธ์ ๋ฑ๋ก ํด API ์ ๊ทผ์ ์ฐจ๋จํฉ๋๋ค.
ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์์
from datetime import datetime, timedelta
blacklist = {}
def blacklist_token(token):
blacklist[token] = datetime.now() + timedelta(minutes=30)
def is_token_blacklisted(token):
return token in blacklist and blacklist[token] > datetime.now()
access_token = "example_token"
blacklist_token(access_token)
print(is_token_blacklisted(access_token)) # True
์ค๋ช : ์ด ์ฝ๋์์๋ ํน์ ํ ํฐ์ ๋ธ๋๋ฆฌ์คํธ์ ๋ฑ๋กํด ๋ง๋ฃ๋๊ธฐ ์ ๊น์ง ์ ๊ทผ์ ์ฐจ๋จํฉ๋๋ค.
OAuth 2.0 ํ ํฐ ์ฌ์ฉ ์์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ๋ง๋ฃ๋ ํ ํฐ ์ฌ์ฉ์ผ๋ก ์ธํ ์ค๋ฅ
- ๋ฌธ์ : ์ฌ์ฉ์๊ฐ ๋ง๋ฃ๋ Access Token์ผ๋ก API๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ, 401 Unauthorized ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ํด๊ฒฐ: 401 ์ค๋ฅ ๋ฐ์ ์ ์๋์ผ๋ก Refresh Token ์ ์ฌ์ฉํด ์๋ก์ด Access Token์ ๋ฐ๊ธํฉ๋๋ค.
2. Refresh Token ์ ์ถ
- ๋ฌธ์ : Refresh Token์ด ์ ์ถ๋๋ฉด ์ฅ๊ธฐ์ ์ผ๋ก ์์คํ ์ ์ ๊ทผํ ์ ์๋ ์ํ์ด ์๊น๋๋ค.
- ํด๊ฒฐ: ๋ชจ๋ํฐ๋ง ์์คํ ์ ํตํด ๋น์ ์์ ์ธ ์ฌ์ฉ์ ๊ฐ์งํ๊ณ , ์ฆ์ ํ ํฐ์ ๋ฌดํจํํฉ๋๋ค.
3. ์ค์ฝํ ์ค์ ๋ฌธ์
- ๋ฌธ์ : ์๋ชป๋ ์ค์ฝํ ์ค์ ์ผ๋ก ํ์ํ ๊ถํ์ ๋ถ์ฌํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ํด๊ฒฐ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฒญํ๋ ์ค์ฝํ๋ฅผ ๋ช ํํ๊ฒ ์ ์ ํ๊ณ ์ฌ์ฉ์์๊ฒ ํฌ๋ช ํ๊ฒ ์ ๊ณตํด์ผ ํฉ๋๋ค.
OAuth 2.0๊ณผ JWT๋ฅผ ํ์ฉํ API ์ค๊ณ ๋ชจ๋ฒ ์ฌ๋ก
- JWT ํ ํฐ ์๋ช
๊ฒ์ฆ ํ์ํ
- ์๋ฒ๋ JWT๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ๋์ ์๋ช (Signature) ์ ๊ฒ์ฆํด ํ ํฐ์ ์๋ณ์กฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. - ํ ํฐ ๋ง๋ฃ ํ Refresh Token ํ์ฉ
- Access Token ๋ง๋ฃ ์ ์๋์ผ๋ก Refresh Token์ ์ฌ์ฉ ํด ๊ฐฑ์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค. - HTTPS๋ฅผ ํตํ ์์ ํ ํต์
- ๋ชจ๋ ํ ํฐ์ HTTPS๋ฅผ ํตํด ์ ์ก ํด ๋คํธ์ํฌ ์ค๊ฐ์์ ํ์ทจ๋์ง ์๋๋ก ํฉ๋๋ค. - ์ต์ ๊ถํ ์์น ์ค์
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์๊ฒ ํ์ํ ์ต์ํ์ ๊ถํ๋ง ๋ถ์ฌํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก : ์์ ํ๊ณ ํจ์จ์ ์ธ OAuth 2.0 ํ ํฐ ๊ด๋ฆฌ
OAuth 2.0์ ํต์ฌ์ ํ ํฐ์ ์์ ํ๊ฒ ๊ด๋ฆฌ ํ๊ณ , ๋ง๋ฃ ๋ฐ ๊ฐฑ์ ๊ณผ์ ์ ํจ์จ์ ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ ๋๋ค. Access Token๊ณผ Refresh Token์ ์ญํ ์ ๋ช ํํ ๊ตฌ๋ถ ํ๊ณ , JWT๋ฅผ ์ฌ์ฉํด ํ์ฅ์ฑ๊ณผ ๋ณด์ ์ ๋ชจ๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ต์ OAuth 2.1 ํ์ค์ ์ค์ํ๊ณ , PKCE์ ๊ฐ์ ๋ณด์ ๊ฐํ๋ฅผ ํตํด ์์ ํ ์ธ์ฆ ์์คํ ์ ์ค๊ณํ์ธ์.
FAQ
Q1. Refresh Token์ ํญ์ ์ฌ์ฉํด์ผ ํ๋์?
A1. ์ฅ๊ธฐ ์ธ์
์ ์ง์ํ๋ ๊ฒฝ์ฐ Refresh Token ์ฌ์ฉ์ด ๊ถ์ฅ๋ฉ๋๋ค. ๋จ๊ธฐ ์ธ์
์์๋ Access Token๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ ์์ต๋๋ค.
Q2. JWT๋ ๋ชจ๋ API์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฐ์?
A2. JWT๋ ํ์ฅ์ฑ ๊ณผ ์์ฒด ๊ฒ์ฆ ๊ธฐ๋ฅ ๋๋ถ์ ๋ค์ํ API ํ๊ฒฝ์์ ์ฌ์ฉ๋ฉ๋๋ค.
Q3. ๋ง๋ฃ๋ ํ ํฐ์ ์๋์ผ๋ก ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์?
A3. 401 Unauthorized ์ค๋ฅ ๋ฐ์ ์ Refresh Token ์ ์ฌ์ฉํด ์๋ ๊ฐฑ์ ํ๋ ๋ก์ง์ ๊ตฌํํฉ๋๋ค.
Q4. Refresh Token์ ์ด๋ป๊ฒ ์์ ํ๊ฒ ์ ์ฅํ ์ ์๋์?
A4. Refresh Token์ HTTPS๋ฅผ ํตํด ์ ์ก ํ๋ฉฐ, ์๋ฒ ์ธก์ ์์ ํ๊ฒ ์ ์ฅ ํด์ผ ํฉ๋๋ค.
Q5. ํ ํฐ ๊ด๋ฆฌ ์ ์ฃผ์ํ ์ ์ ๋ฌด์์ธ๊ฐ์?
A5. ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ ์ ์งง๊ฒ ์ ์งํ๊ณ , ํ์ ์ Refresh Token์ ์ฌ์ฉํด ์๋ก ๋ฐ๊ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋๊ธ