메인 콘텐츠로 건너뛰기
X API는 모든 엔드포인트에서 인증이 필요합니다. XDK는 다음의 세 가지 인증 방식을 지원합니다:
  1. Bearer Token(앱 전용)
  2. OAuth 2.0 with PKCE
  3. OAuth 1.0a User Context
  • Bearer Token: 앱 인증이 지원되는 엔드포인트에서 읽기 전용 액세스에 사용합니다(예: Post 검색, 스트리밍 엔드포인트).
  • OAuth 2.0 PKCE: 스코프 기반의 사용자 승인 액세스를 위한 보안 인증 방식입니다(예: 인증된 사용자의 Post 비공개 지표 가져오기).
  • OAuth 1.0a: DM 및 미디어 업로드를 포함한 전체 읽기/쓰기 액세스를 위한 레거시 인증입니다.
참고: 사용자 승인 액세스에는 OAuth 1.0 대신 OAuth 2.0 사용을 권장합니다. X 개발자 포털에서 자격 증명을 발급받으세요. 승인된 개발자 계정과 적절한 권한이 있는 App이 필요합니다(예: 읽기 + 쓰기).

클라이언트 생성

모든 인증 흐름은 Client 인스턴스를 생성합니다.
from xdk import Client

1. Bearer Token (App-Only)

사용자 컨텍스트 없이 읽기 전용 작업에 사용합니다. 단계:
  1. 개발자 포털에서 App에 대한 Bearer Token을 생성합니다.
  2. 이를 Client에 전달합니다.
예시:
client = Client(bearer_token="XXXXX")
사용:
response = client.posts.search_recent(query="python", max_results=10)
print(response.data[0]['text'])  # 첫 번째 Post 접근

2. PKCE를 사용한 OAuth 2.0(사용자 컨텍스트)

이 예시는 Proof Key for Code Exchange(PKCE)와 함께 OAuth 2.0을 사용하는 방법을 보여줍니다. 사용자별 액세스(예: 사용자를 대신해 게시), 사용자용 미디어 업로드 등에 사용하세요. 단계:
  1. 개발자 포털에서 리디렉트 URI(예: http://localhost:8080/callback)와 함께 App을 등록합니다.
  2. Client ID를 발급받습니다(PKCE에는 Client Secret이 필요하지 않습니다).
  3. 플로우를 시작하고 사용자를 인증 URL로 이동시킨 다음 콜백을 처리합니다.
예시(콜백을 처리하는 웹 서버 사용):
from xdk.auth import OAuth2PKCE
from urllib.parse import urlparse
import webbrowser

# 1단계: PKCE 인스턴스 생성
auth = OAuth2PKCE(
    client_id="your_client_id",
    redirect_uri="http://localhost:8080/callback",
    scopes=["tweet.read", "users.read", "offline.access"]  # 필요에 따라 스코프를 조정하세요
)

# 2단계: 인가 URL 가져오기
auth_url = auth.get_authorization_url()
print(f"인가를 위해 이 URL을 방문하세요: {auth_url}")
webbrowser.open(auth_url)

# 3단계: 콜백 처리(실제 App에서는 Flask 같은 웹 프레임워크 사용)
# 예: callback_url = "http://localhost:8080/callback?code=AUTH_CODE_HERE"
callback_url = input("전체 콜백 URL을 여기 붙여넣으세요: ")
parsed = urlparse(callback_url)
code = parsed.query.split("=")[1]

# 4단계: 코드를 토큰으로 교환
tokens = auth.fetch_token(authorization_code=code)
access_token = tokens["access_token"]
refresh_token = tokens["refresh_token"]  # 갱신용으로 저장

# 5단계: 클라이언트 생성
client = Client(oauth2_access_token=access_token)
토큰 새로 고침(장기 세션은 SDK에서 자동)
# 액세스 토큰이 만료되면 저장된 refresh_token으로 새로고침합니다
tokens = auth.refresh_token(refresh_token=refresh_token)
client = Client(oauth2_access_token=tokens["access_token"])

3. OAuth 1.0a User Context

OAuth 1.0이 필요한 레거시 엔드포인트용입니다. 단계:
  1. 개발자 포털에서 Consumer Key/Secret과 Access Token/Secret을 생성합니다.
  2. 클라이언트를 초기화할 때 해당 값을 전달합니다.
예시:
from xdk.auth import OAuth1User

auth = OAuth1User(
    consumer_key="your_consumer_key",
    consumer_secret="your_consumer_secret",
    access_token="your_access_token",
    access_token_secret="your_access_token_secret"
)

client = Client(auth=auth)
참고:
  • 프로덕션 환경에서는 시크릿을 하드코딩하지 마세요. 환경 변수 또는 시크릿 관리 도구를 사용하세요(예: os.getenv("X_BEARER_TOKEN")).
  • PKCE의 경우 프로덕션에서는 리디렉트 URI에 HTTPS를 사용해야 합니다.
  • SDK는 토큰을 검증하며, 실패 시 xdk.AuthenticationError를 발생시킵니다.