> ## Documentation Index
> Fetch the complete documentation index at: https://x-preview-mintlify-b4f5bfb1.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 3-legged OAuth flow를 사용하여 Access Token 얻기

> request_token, authorize 및 access_token 엔드포인트를 사용하여 X API용 사용자 액세스 토큰을 얻기 위한 3-legged OAuth 1.0a 흐름을 진행합니다.

export const Button = ({href, children}) => {
  return <div className="not-prose">
    <a href={href}>
      <button className="x-btn">
        <span>{children}</span>
        <svg width="3" height="24" viewBox="0 -9 3 24" class="h-6 rotate-0 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
      </button>
    </a>
  </div>;
};

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

다른 사용자를 대신하여 작업을 수행하려면 해당 사용자의 액세스 토큰을 얻어야 합니다. 액세스 토큰은 요청이 대신 이루어지는 X 계정을 지정하므로, 이러한 토큰을 얻으려면 먼저 사용자가 액세스 권한을 부여해야 합니다. 이 토큰은 만료되지 않지만 언제든지 사용자가 취소할 수 있습니다.

X는 3-legged OAuth flow를 통해 사용자 액세스 토큰을 얻을 수 있게 해줍니다. 이는 애플리케이션이 사용자를 X로 리다이렉트하고 사용자가 애플리케이션을 승인하도록 함으로써 **access token**과 access token secret을 얻을 수 있게 합니다. 이 흐름은 [Log in with X 구현](/resources/fundamentals/authentication/guides/log-in-with-x)에 설명된 흐름과 거의 동일하지만, 두 가지 예외가 있습니다:

* [GET oauth/authenticate](/resources/fundamentals/authentication/api-reference#get-oauth-authenticate) 대신 [GET oauth/authorize](/resources/fundamentals/authentication/api-reference#get-oauth-authorize) 엔드포인트가 사용됩니다.
* 이전에 액세스가 부여되었더라도 사용자는 **항상** 애플리케이션에 대한 액세스를 승인하도록 프롬프트됩니다.

시작하기 전에 [애플리케이션의](/resources/fundamentals/developer-apps) 권한을 확인하고 consumer 키와 콜백 URL을 알아야 합니다. 콜백 URL이나 공개적으로 액세스 가능한 UI가 없는 경우, 승인 후 사용자를 리다이렉트하기 위해 웹 브라우저에 액세스하거나 임베드할 수 없는 애플리케이션을 위한 [PIN 기반 승인](/resources/fundamentals/authentication/oauth-1-0a/pin-based-oauth)을 사용하는 것을 고려하세요.

3-legged 로그인 상호 작용의 가능한 상태는 다음 순서도에 나와 있습니다:

![](https://cdn.cms-twdigitalassets.com/content/dam/developer-twitter/docs/obtaining-access-tokens.png.twimg.1920.png)

#### 프로세스 개요

상위 수준에서 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](/resources/fundamentals/authentication/api-reference#post-oauth-request-token)**

consumer 애플리케이션이 request token을 얻기 위한 요청을 생성합니다.

이 요청에서 유일한 매개변수는 oauth\_callback이며, 이는 2단계를 완료할 때 사용자가 리다이렉트되기를 원하는 URL의 [URL 인코딩](/resources/fundamentals/authentication/oauth-1-0a/percent-encoding-parameters)된 버전이어야 합니다. 나머지 매개변수는 OAuth 서명 프로세스에 의해 추가됩니다.

참고 - [POST oauth/request\_token](/resources/fundamentals/authentication/api-reference#post-oauth-request-token) 엔드포인트와 함께 사용하는 콜백 URL은 Developer Console의 앱 세부 정보 페이지에서 [개발자 App의](/resources/fundamentals/developer-apps) 설정 내에 구성되어야 합니다.

**요청 포함 항목:**

`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](/resources/fundamentals/authentication/api-reference#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](/resources/fundamentals/authentication/api-reference#post-oauth-access-token)**

request token을 사용 가능한 access token으로 변환합니다.

request token을 사용 가능한 access token으로 렌더링하려면 애플리케이션이 2단계에서 얻은 `oauth_verifier` 값을 포함하여 [POST oauth/access\_token](/resources/fundamentals/authentication/api-reference#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](/resources/fundamentals/authentication/api-reference)를 사용하세요.

**응답 포함 항목:**

`oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4`

`oauth_token_secret=PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo`

**OAuth 1.0a(application-user)가 필요한 요청에 이러한 자격 증명 사용**

이제 사용자 액세스 토큰을 얻었습니다. 이를 사용하여 사용자를 대신해 Tweet을 생성하는 [POST statuses/update](/x-api/posts/manage-tweets/introduction)와 같은 특정 API에 액세스할 수 있습니다.

**요청 포함 항목:**

`POST statuses/update.json`

`oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w`

`oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4`

#### 예시 사용 사례

표준 흐름은 웹 기반이며 3-legged 승인 OAuth 흐름을 사용합니다. 여기에 나와 있는 스크린샷은 [https://github.com/xdevplatform/twauth-web](https://github.com/xdevplatform/twauth-web)에서 소스를 볼 수 있는 샘플의 일부입니다.

애플리케이션의 어느 시점에서 애플리케이션을 승인하기 위해 X로 리다이렉트하고자 할 것입니다.

<Frame>
  <img src="https://mintcdn.com/x-preview-mintlify-b4f5bfb1/euVEpOI6gBc89wOj/images/twauth-web-2.png?fit=max&auto=format&n=euVEpOI6gBc89wOj&q=85&s=11447c0e145dcceb3fcefd670732a970" alt="" width="1858" height="1578" data-path="images/twauth-web-2.png" />
</Frame>

request token으로 X로 리다이렉트하면 사용자에게 애플리케이션을 승인하도록 프롬프트됩니다.

<Frame>
  <img src="https://mintcdn.com/x-preview-mintlify-b4f5bfb1/euVEpOI6gBc89wOj/images/twauth-web-3.png?fit=max&auto=format&n=euVEpOI6gBc89wOj&q=85&s=1a55361b205580d63f142ab596c1f41a" alt="" width="1858" height="1578" data-path="images/twauth-web-3.png" />
</Frame>

애플리케이션을 승인하면 사용자는 request token을 생성할 때 제공한 콜백 URL로 리다이렉트됩니다. 이를 사용하여 이 사용자에 대한 영구 액세스 토큰을 얻고 로컬에 저장합니다.

<Frame>
  <img src="https://mintcdn.com/x-preview-mintlify-b4f5bfb1/euVEpOI6gBc89wOj/images/twauth-web-4.png?fit=max&auto=format&n=euVEpOI6gBc89wOj&q=85&s=cc8405ffad4c4d95c3833b530f7a00a5" alt="" width="1858" height="1578" data-path="images/twauth-web-4.png" />
</Frame>
