Skip to main content

3-legged OAuth flow를 사용하여 액세스 토큰 얻기

다른 사용자를 대신하여 작업을 수행하려면 해당 사용자의 액세스 토큰을 얻어야 합니다. 액세스 토큰은 요청이 대신 이루어지는 X 계정을 지정하므로, 이러한 토큰을 얻으려면 먼저 사용자가 액세스 권한을 부여해야 합니다. 이 토큰은 만료되지 않지만 언제든지 사용자가 취소할 수 있습니다. X는 3-legged OAuth flow를 통해 사용자 액세스 토큰을 얻을 수 있게 해줍니다. 이는 애플리케이션이 사용자를 X로 리다이렉트하고 사용자가 애플리케이션을 승인하도록 함으로써 access token과 access token secret을 얻을 수 있게 합니다. 이 흐름은 Log in with X 구현에 설명된 흐름과 거의 동일하지만, 두 가지 예외가 있습니다:
  • GET oauth/authenticate 대신 GET oauth/authorize 엔드포인트가 사용됩니다.
  • 이전에 액세스가 부여되었더라도 사용자는 항상 애플리케이션에 대한 액세스를 승인하도록 프롬프트됩니다.
시작하기 전에 애플리케이션의 권한을 확인하고 consumer 키와 콜백 URL을 알아야 합니다. 콜백 URL이나 공개적으로 액세스 가능한 UI가 없는 경우, 승인 후 사용자를 리다이렉트하기 위해 웹 브라우저에 액세스하거나 임베드할 수 없는 애플리케이션을 위한 PIN 기반 승인을 사용하는 것을 고려하세요. 3-legged 로그인 상호 작용의 가능한 상태는 다음 순서도에 나와 있습니다:

프로세스 개요

상위 수준에서 3-Legged OAuth 프로세스는 다음을 수행합니다:
  1. consumer 애플리케이션이 request token을 얻기 위한 요청을 생성합니다.
  2. 사용자가 인증하도록 하고 consumer 애플리케이션에 request token을 전송합니다.
  3. request token을 사용 가능한 사용자 액세스 토큰으로 변환합니다.
용어 설명 아래 가이드에서는 같은 것을 지칭하는 다양한 용어를 볼 수 있습니다. 클라이언트 자격 증명:
  • App Key === API Key === Consumer API Key === Consumer Key === Customer Key === oauth_consumer_key
  • App Key Secret === API Secret Key === Consumer Secret === Consumer Key === Customer Key === oauth_consumer_secret
  • Callback URL === oauth_callback
임시 자격 증명:
  • Request Token === oauth_token
  • Request Token Secret === oauth_token_secret
  • oauth_verifier
토큰 자격 증명:
  • Access token === Token === 결과 oauth_token
  • Access token secret === Token Secret === 결과 oauth_token_secret

단계별 안내

1단계: POST oauth/request_token consumer 애플리케이션이 request token을 얻기 위한 요청을 생성합니다. 이 요청에서 유일한 매개변수는 oauth_callback이며, 이는 2단계를 완료할 때 사용자가 리다이렉트되기를 원하는 URL의 URL 인코딩된 버전이어야 합니다. 나머지 매개변수는 OAuth 서명 프로세스에 의해 추가됩니다. 참고 - POST oauth/request_token 엔드포인트와 함께 사용하는 콜백 URL은 Developer Console의 앱 세부 정보 페이지에서 개발자 App의 설정 내에 구성되어야 합니다. 요청 포함 항목: oauth_callback="https%3A%2F%2FyourCallbackUrl.com" oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w" 앱은 응답의 HTTP 상태를 확인해야 합니다. 200 이외의 값은 실패를 나타냅니다. 응답 본문에는 oauth_token, oauth_token_secret, oauth_callback_confirmed 매개변수가 포함됩니다. 앱은 oauth_callback_confirmed가 true인지 확인하고 다음 단계에서 사용하기 위해 나머지 두 값을 저장해야 합니다. 응답 포함 항목 oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0 oauth_token_secret=veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI oauth_callback_confirmed=true 2단계: GET oauth/authorize 사용자가 인증하도록 하고 consumer 애플리케이션에 request token을 전송합니다. 사용자를 리다이렉트할 예시 URL: https://api.x.com/oauth/authorize?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0 인증에 성공하면 callback_urloauth_tokenoauth_verifier 매개변수를 포함한 요청을 받게 됩니다. 애플리케이션은 토큰이 1단계에서 받은 request token과 일치하는지 확인해야 합니다. 클라이언트의 리다이렉트로부터의 요청: https://yourCallbackUrl.com?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0&oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY 3단계: POST oauth/access_token request token을 사용 가능한 access token으로 변환합니다. request token을 사용 가능한 access token으로 렌더링하려면 애플리케이션이 2단계에서 얻은 oauth_verifier 값을 포함하여 POST oauth/access_token 엔드포인트에 요청해야 합니다. request token 역시 헤더의 oauth_token 부분에 전달되지만, 이는 서명 프로세스에 의해 추가됩니다. 요청 포함 항목: POST /oauth/access_token oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0 oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY 성공 응답에는 oauth_token, oauth_token_secret 매개변수가 포함됩니다. 토큰과 토큰 시크릿은 저장되어 X API에 대한 향후 인증된 요청에 사용되어야 합니다. 사용자의 신원을 확인하려면 GET account/verify_credentials를 사용하세요. 응답 포함 항목: oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4 oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo OAuth 1.0a(application-user)가 필요한 요청에 이러한 자격 증명 사용 이제 사용자 액세스 토큰을 얻었습니다. 이를 사용하여 사용자를 대신해 Tweet을 생성하는 POST statuses/update와 같은 특정 API에 액세스할 수 있습니다. 요청 포함 항목: POST statuses/update.json oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

예시 사용 사례

표준 흐름은 웹 기반이며 3-legged 승인 OAuth 흐름을 사용합니다. 여기에 나와 있는 스크린샷은 https://github.com/xdevplatform/twauth-web에서 소스를 볼 수 있는 샘플의 일부입니다. 애플리케이션의 어느 시점에서 애플리케이션을 승인하기 위해 X로 리다이렉트하고자 할 것입니다.
request token으로 X로 리다이렉트하면 사용자에게 애플리케이션을 승인하도록 프롬프트됩니다.
애플리케이션을 승인하면 사용자는 request token을 생성할 때 제공한 콜백 URL로 리다이렉트됩니다. 이를 사용하여 이 사용자에 대한 영구 액세스 토큰을 얻고 로컬에 저장합니다.