인증

이 문단은 트위터의 인증 참조 문서 에 대한 보충입니다.

들어가며

트위피는 OAuth 1.0a 사용자 컨텍스트와, OAuth 2.0 베어러 토큰 (앱 한정), 그리고 OAuth 2.0 PKCE 인증 코드 플로우 (사용자 컨텍스트) 인증 메서드를 지원합니다.

트위터 API v1.1

OAuth 2.0 베어러 토큰 (앱 한정)

베어러 토큰을 생성하는 가장 간단한 방법은, 트위터 개발자 포털의 프로젝트 및 앱 페이지 에서 해당하는 앱의 〈Keys and Tokens〉 버튼을 누르는 것입니다.

그러면 베어러 토큰을 이용해 OAuth2BearerHandler 를 초기화(Initialize)하고, OAuth2BearerHandler 인스턴스로 API 를 초기화할 수 있습니다:

import tweepy

auth = tweepy.OAuth2BearerHandler("Bearer Token here")
api = tweepy.API(auth)

이 대신, 같은 페이지에서 얻을 수 있는 API Consumer Key값과 Secret값을 이용해 아래와 같이 OAuth2AppHandler 를 초기화할 수도 있습니다:

import tweepy

auth = tweepy.OAuth2AppHandler(
    "API / Consumer Key here", "API / Consumer Secret here"
)
api = tweepy.API(auth)

OAuth 1.0a 사용자 컨텍스트

아까와 비슷하게, 본인의 개발자 계정으로 인증하는 가장 간단한 방법은 트위터 개발자 포털의 Projects & Apps 페이지 에서 해당하는 앱의 〈Keys and Tokens〉 버튼을 누르고, 해당 페이지에서 액세스 토큰과 액세스 토큰 Secret값을 얻어오는 것입니다.

물론, 해당 페이지에서 얻어올 수 있는 앱의 API Consumer Key값과 Secret값도 필요합니다.

그러면 이 4개의 인증 관련 키값 및 토큰값을 이용해 OAuth1UserHandler 를 초기화할 수 있게 되며, OAuth1UserHandler 인스턴스를 이용해 API 를 초기화할 수 있습니다.

import tweepy

auth = tweepy.OAuth1UserHandler(
   "API / Consumer Key here", "API / Consumer Secret here",
   "Access Token here", "Access Token Secret here"
)
api = tweepy.API(auth)

다른 사용자로 인증하려면, 3-legged OAuth 를 참고하시기 바랍니다.

트위터 API v2

트위터 API v2의 인터페이스인 Client 는, 개발자를 위해 OAuth 2.0 베어러 토큰 (앱 한정)과, OAuth 1.0a 사용자 컨텍스트 인증 방식을 둘 다 처리할 수 있게 만들어졌습니다.

OAuth 2.0 베어러 토큰 (앱 한정)

베어러 토큰을 생성하는 가장 간단한 방법은, 트위터 개발자 포털의 프로젝트 및 앱 페이지 에서 해당하는 앱의 〈Keys and Tokens〉 버튼을 누르는 것입니다.

간단하게, 그냥 Client 를 초기화할 때 아래와 같이 베어러 토큰을 전달하기만 하면 됩니다:

import tweepy

client = tweepy.Client("Bearer Token here")

OAuth 1.0a 사용자 컨텍스트

아까와 비슷하게, 본인의 개발자 계정으로 인증하는 가장 간단한 방법은 트위터 개발자 포털의 Projects & Apps 페이지 에서 해당하는 앱의 〈Keys and Tokens〉 버튼을 누르고, 해당 페이지에서 액세스 토큰과 액세스 토큰 Secret값을 얻어오는 것입니다.

물론, 해당 페이지에서 얻어올 수 있는 앱의 API Consumer Key값과 Secret값도 필요합니다.

간단하게, 그냥 Client 를 초기화할 때 아래와 같이 4개의 인증 관련 키값 및 토큰값을 전달하기만 하면 됩니다:

import tweepy

client = tweepy.Client(
    consumer_key="API / Consumer Key here",
    consumer_secret="API / Consumer Secret here",
    access_token="Access Token here",
    access_token_secret="Access Token Secret here"
)

다른 사용자로 인증하려면, 3-legged OAuth 를 참고하시기 바랍니다.

OAuth 2.0 PKCE 인증 코드 플로우 (사용자 컨텍스트)

OAuth2UserHandler 를 이용해, 액세스 토큰을 생성하고 사용자로서 인증할 수 있습니다.

우선 트위터 개발자 포털의 Projects & Apps 페이지 에서 해당 앱 정보에 들어가, 하단의 User authentication settings에서 OAuth 2.0 설정을 활성화해야 합니다. 이 작업을 위해서는, 콜백 및 리다이렉트 URI 또는 URL을 제공해야 합니다.

그런 다음, 앱의 클라이언트 ID값을 메모해야 합니다. 이는 트위터 개발자 포털의 Projects & Apps 페이지 에서 해당 앱 정보에 들어가, Keys and Tokens 탭을 눌러 생성 및 확인할 수 있습니다. 상용 클라이언트를 사용 중인 경우, 클라이언트 시크릿값도 생성해야 합니다.

그러면 이제 Scope로, 아래와 같이 OAuth2UserHandler 를 초기화할 수 있습니다:

import tweepy

oauth2_user_handler = tweepy.OAuth2UserHandler(
    client_id="Client ID here",
    redirect_uri="Callback / Redirect URI / URL here",
    scope=["Scope here", "Scope here"],
    # Client Secret is only necessary if using a confidential client
    client_secret="Client Secret here"
)

Scope의 목록은 트위터의 OAuth 2.0 PKCE 인증 코드 플로우 참조 문서 의 Scope 문단을 참고하시기 바랍니다.

이제, 아래와 같이 인증 URL을 받아올 수 있습니다:

print(oauth2_user_handler.get_authorization_url())

이는 사용자가 앱에서 인증하도록 하는 데 사용할 수 있습니다. 그러면 제공했던 콜백 및 리다이렉트 URI/URL로 리다이렉트되게 됩니다. 액세스 토큰을 가져오려면, 아래와 같이 인증 응답 URL을 제공해야 합니다:

response = oauth2_user_handler.fetch_token(
    "Authorization Response URL here"
)
access_token = response["access_token"]

아래와 같이 Client 를 초기화할 때 액세스 토큰을 전달할 수 있습니다:

client = tweepy.Client("Access Token here")

3-legged OAuth

이 문단은 트위터의 3-legged OAuth 플로우 참조 문서 에 대한 보충입니다.

개발자 계정이 아닌 다른 사용자로서 인증하려면, 3-legged OAuth 플로우를 통해 해당 사용자의 액세스 토큰을 가져와야 합니다.

우선 트위터 개발자 포털의 Projects & Apps 페이지 에서 해당 앱 정보에 들어가, 하단의 User authentication settings에서 OAuth 1.0(a) 설정을 활성화해야 합니다. 이 작업을 위해서는, 콜백 및 리다이렉트 URI 또는 URL을 제공해야 합니다.

그런 다음, 앱의 API Consumer 키값과 Secret값을 가져옵니다. 이는 트위터 개발자 포털의 Projects & Apps 페이지 에서 해당 앱 정보에 들어가, Keys and Tokens 탭을 눌러 생성 및 확인할 수 있습니다.

그러면 아래와 같이 OAuth1UserHandler 인스턴스를 초기화할 수 있습니다:

import tweepy

oauth1_user_handler = tweepy.OAuth1UserHandler(
    "API / Consumer Key here", "API / Consumer Secret here",
    callback="Callback / Redirect URI / URL here"
)

이제, 아래와 같이 인증 URL을 받아올 수 있습니다:

print(oauth1_user_handler.get_authorization_url())

〈트위터로 로그인〉 및 〈트위터로 회원가입’을 이용하기 위해서는, 인증 URL을 받아오는 과정에서 signin_with_twitter 를 아래와 같이 설정하면 됩니다:

print(oauth1_user_handler.get_authorization_url(signin_with_twitter=True))

이는 사용자가 앱에서 인증하는데 사용할 수 있습니다. 이렇게 하면, 해당 사용자는 oauth_tokenoauth_verifier 매개변수와 함께 제공했던 콜백 및 리다이렉트 URI/URL로 리다이렉트됩니다.

이제 Verifier를 이용해, 액세스 토큰과 Secret값을 가져올 수 있습니다:

access_token, access_token_secret = oauth1_user_handler.get_access_token(
    "Verifier (oauth_verifier) here"
)

만약 OAuth1UserHandler 를 다시 초기화해야 할 경우, 위처럼 Verifier를 이용해 액세스 토큰과 Secret값을 가져오기 전에 요청(Request) 토큰 및 Secret값을 설정할 수 있습니다:

request_token = oauth1_user_handler.request_token["oauth_token"]
request_secret = oauth1_user_handler.request_token["oauth_token_secret"]

new_oauth1_user_handler = tweepy.OAuth1UserHandler(
    "API / Consumer Key here", "API / Consumer Secret here",
    callback="Callback / Redirect URI / URL here"
)
new_oauth1_user_handler.request_token = {
    "oauth_token": "Request Token (oauth_token) here",
    "oauth_token_secret": request_secret
}
access_token, access_token_secret = (
    new_oauth1_user_handler.get_access_token(
        "Verifier (oauth_verifier) here"
    )
)

대신, 간단히 OAuth1UserHandler 의 예전 인스턴스를 사용할수도 있습니다.

그러면 아래와 같이 OAuth1UserHandler 의 이 인스턴스를 사용, API 를 초기화할 수 있습니다:

api = tweepy.API(oauth1_user_handler)

API 를 초기화하기 위해, access_tokenaccess_token_secret 을 사용해 OAuth1UserHandler 의 새 인스턴스를 초기화할수도 있습니다:

auth = tweepy.OAuth1UserHandler(
   "API / Consumer Key here", "API / Consumer Secret here",
   "Access Token here", "Access Token Secret here"
)
api = tweepy.API(auth)

또한 Client 를 초기화하기 위해, access_tokenaccess_token_secret 을아래와 같이 직접 전달할 수도 있습니다:

client = tweepy.Client(
    consumer_key="API / Consumer Key here",
    consumer_secret="API / Consumer Secret here",
    access_token="Access Token here",
    access_token_secret="Access Token Secret here"
)

PIN 기반 OAuth

이 문단은 트위터의 PIN 기반 OAuth 참조 문서 에 대한 보충입니다.

PIN 기반 OAuth 플로우는 callback 매개변수를 "oob" 로 설정함으로써 사용할 수 있습니다:

import tweepy

oauth1_user_handler = tweepy.OAuth1UserHandler(
    "API / Consumer Key here", "API / Consumer Secret here",
    callback="oob"
)

그러면 인증 URL을 같은 방법으로 받아올 수 있습니다:

print(oauth1_user_handler.get_authorization_url())

사용자가 이 URL로 인증하면, PIN을 받게 됩니다. 이 PIN을 사용자로부터 받아와, Verifier로서 사용할 수 있습니다:

verifier = input("Input PIN: ")
access_token, access_token_secret = oauth1_user_handler.get_access_token(
    verifier
)

그러면 OAuth1UserHandler 의 인스턴스나 access_tokenaccess_token_secret 를 사용할 수 있습니다.

참조

class tweepy.OAuth1UserHandler(consumer_key, consumer_secret, access_token=None, access_token_secret=None, callback=None)

OAuth 1.0a 사용자 컨텍스트 인증 처리기(Handler)

버전 4.5에서 변경: OAuthHandler 로부터 이름 변경됨

get_authorization_url(signin_with_twitter=False, access_type=None)

사용자를 리다이렉트시킬 인증 URL을 가져옴

get_access_token(verifier=None)

사용자의 앱 인증 이후, 액세스 토큰과 Secret값을 Verifier로 받아옴

set_access_token(key, secret)

버전 4.5부터 폐지됨: 초기화(Initalization)를 통해 설정할 것

class tweepy.OAuthHandler(consumer_key, consumer_secret, access_token=None, access_token_secret=None, callback=None)

다음 클래스와 동일함: OAuth1UserHandler

버전 4.5부터 폐지됨: OAuth1UserHandler 를 대신 사용할 것

class tweepy.OAuth2AppHandler(consumer_key, consumer_secret)

API Consumer Key값과 Secret값을 사용하는 OAuth 2.0 베어러 토큰 (앱 한정) 인증 처리기(Handler)

버전 4.5에서 변경: AppAuthHandler 로부터 이름 변경됨

class tweepy.AppAuthHandler(consumer_key, consumer_secret)

다음 클래스와 동일함: OAuth2AppHandler

버전 4.5부터 폐지됨: OAuth2AppHandler 를 대신 사용할 것

class tweepy.OAuth2BearerHandler(bearer_token)

기반 클래스: requests.auth.AuthBase

OAuth 2.0 베어러 토큰 (앱 한정) 인증 처리기(Handler)

버전 4.5에 추가.

class tweepy.OAuth2UserHandler(*, client_id, redirect_uri, scope, client_secret=None)

기반 클래스: requests_oauthlib.oauth2_session.OAuth2Session

OAuth 2.0 PKCE 인증 코드 플로우 (사용자 컨텍스트) 인증 처리기(Handler)

버전 4.5에 추가.

Construct a new OAuth 2 client session.

매개변수
  • client_id – Client id obtained during registration

  • clientoauthlib.oauth2.Client to be used. Default is WebApplicationClient which is useful for any hosted application but not mobile or desktop.

  • scope – List of scopes you wish to request access to

  • redirect_uri – Redirect URI you registered as callback

  • token – Token dictionary, must include access_token and token_type.

  • state – State string used to prevent CSRF. This will be given when creating the authorization url and must be supplied when parsing the authorization response. Can be either a string or a no argument callable.

  • kwargs – Arguments to pass to the Session constructor.

Auto_refresh_url

Refresh token endpoint URL, must be HTTPS. Supply this if you wish the client to automatically refresh your access tokens.

Auto_refresh_kwargs

Extra arguments to pass to the refresh token endpoint.

Token_updater

Method with one argument, token, to be used to update your token database on automatic token refresh. If not set a TokenUpdated warning will be raised when a token has been refreshed. This warning will carry the token in its token argument.

get_authorization_url()

사용자를 리다이렉트시킬 인증 URL을 가져옴

fetch_token(authorization_response)

사용자 앱 인증 후, 인증 응답 URL을 통해 액세스 토큰을 가져옴