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 엔드포인트가 사용됩니다.
- 이전에 액세스가 부여되었더라도 사용자는 항상 애플리케이션에 대한 액세스를 승인하도록 프롬프트됩니다.
프로세스 개요
상위 수준에서 3-Legged OAuth 프로세스는 다음을 수행합니다:- consumer 애플리케이션이 request token을 얻기 위한 요청을 생성합니다.
- 사용자가 인증하도록 하고 consumer 애플리케이션에 request token을 전송합니다.
- 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_url은 oauth_token과 oauth_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로 리다이렉트하고자 할 것입니다.

