메인 콘텐츠로 건너뛰기

3-legged OAuth 플로우를 사용한 액세스 토큰 획득

다른 사용자를 대신해 작업을 수행하려면 해당 사용자의 액세스 토큰을 받아야 합니다. 액세스 토큰은 요청이 누구의 X 계정을 대신해 수행되는지를 지정하므로, 이를 얻으려면 먼저 사용자가 액세스를 허용해야 합니다. 이 토큰은 만료되지 않지만 사용자가 언제든지 취소할 수 있습니다. X는 3-legged OAuth 플로우를 통해 사용자 액세스 토큰을 발급받을 수 있도록 합니다. 이 플로우에서는 사용자를 X로 리디렉션하여 애플리케이션을 승인받음으로써 애플리케이션이 액세스 토큰과 액세스 토큰 시크릿을 획득합니다. 이 플로우는 Log in with X 구현에 설명된 플로우와 거의 동일하지만 다음 두 가지 예외가 있습니다:
  • GET oauth/authorize 엔드포인트를 GET oauth/authenticate 대신 사용합니다.
  • 사용자는 이전에 액세스를 허용했더라도 애플리케이션에 대한 액세스 승인을 요청하는 프롬프트가 항상 표시됩니다.  
시작하기 전에 애플리케이션의 권한을 확인하고 consumer key와 callback URL을 파악해야 합니다. callback URL이나 외부에서 접근 가능한 UI가 없다면, 인증 후 사용자를 리디렉션하기 위해 웹 브라우저에 접근하거나 임베드할 수 없는 애플리케이션을 대상으로 하는 PIN 기반 인증 사용을 고려하세요.  3-legged 로그인 상호작용의 가능한 상태는 다음 플로우차트에 나와 있습니다:

프로세스 개요

고수준에서 3-Legged OAuth 프로세스는 다음을 수행합니다:
  1. 소비자 애플리케이션이 요청 토큰을 얻기 위한 요청을 생성합니다.
  2. 사용자가 인증을 완료하면, 소비자 애플리케이션에 요청 토큰이 전달됩니다.
  3. 요청 토큰을 사용자 액세스 토큰으로 전환합니다.
용어 정리 아래 가이드에서는 동일한 개념을 가리키는 서로 다른 용어가 등장할 수 있습니다. 클라이언트 자격 증명:
  • 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 컨슈머 애플리케이션이 요청 토큰을 받도록 요청을 생성합니다. 이 요청에서 유일하게 고유한 매개변수는 oauth_callback이며, 사용자가 2단계를 완료했을 때 리디렉션되길 원하는 URL의 URL 인코딩된 버전이어야 합니다. 나머지 매개변수는 OAuth 서명 프로세스에 의해 추가됩니다. 주의: POST oauth/request_token 엔드포인트와 함께 사용하는 모든 콜백 URL은 개발자 포털의 앱 상세 페이지에 있는 Developer 앱 설정에서 구성해야 합니다.   요청에 포함: 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 사용자가 인증을 수행하고 컨슈머 애플리케이션에 요청 토큰을 전달하도록 합니다.   사용자 리디렉션용 예시 URL: https://api.x.com/oauth/authorize?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0 인증이 성공하면 callback_urloauth_tokenoauth_verifier 매개변수가 포함된 요청을 수신합니다. 애플리케이션은 해당 토큰이 1단계에서 받은 요청 토큰과 일치하는지 확인해야 합니다.   클라이언트 리디렉션에서의 요청: https://yourCallbackUrl.com?oauth_token=NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0&oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY 3단계: POST oauth/access_token 요청 토큰을 사용 가능한 액세스 토큰으로 전환합니다. 요청 토큰을 사용 가능한 액세스 토큰으로 전환하려면 애플리케이션은 2단계에서 획득한 oauth_verifier 값을 포함하여 POST oauth/access_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(애플리케이션-사용자) 요구 요청에 사용하기 이제 사용자 액세스 토큰을 확보했으므로, 이를 사용해 사용자를 대신해 게시물을 생성하기 위해 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로 리디렉션해야 합니다.
요청 토큰과 함께 X로 리디렉션되면 사용자는 애플리케이션 승인을 요청받습니다.
사용자가 애플리케이션을 승인하면, 요청 토큰을 생성할 때 제공한 callback URL로 리디렉션됩니다. 이를 사용해 해당 사용자에 대한 영구 액세스 토큰을 발급받아 로컬에 저장합니다.