Skip to main content

Signature 생성

이 페이지에서는 HTTP 요청에 대한 OAuth 1.0a HMAC-SHA1 서명을 생성하는 방법을 설명합니다. 이 서명은 요청 승인에 설명된 대로 승인된 요청의 일부로 X API에 전달하기에 적합합니다. 서명을 시연하는 데 사용된 요청은 https://api.x.com/1.1/statuses/update.json에 대한 POST입니다. 원시 요청은 다음과 같습니다:
요청 메서드 및 URL 수집 서명을 생성하려면 먼저 요청의 HTTP 메서드와 URL을 결정합니다. 이 둘은 요청을 생성할 때 알려져 있으므로 얻기 쉽습니다. X API 요청의 요청 메서드는 거의 항상 GET 또는 POST가 됩니다. base URL은 쿼리 문자열이나 해시 매개변수를 제외한 요청이 지시되는 URL입니다. 여기서 올바른 프로토콜을 사용하는 것이 중요하므로 URL의 “https://” 부분이 API로 전송된 실제 요청과 일치하는지 확인하세요.

매개변수 수집

다음으로, 요청에 포함된 모든 매개변수를 수집합니다. 이러한 추가 매개변수에는 두 가지 위치가 있습니다 - URL(쿼리 문자열의 일부) 및 요청 본문. 예시 요청에는 두 위치 모두에 단일 매개변수가 포함되어 있습니다:
HTTP 요청에는 URL 인코딩된 매개변수가 있지만, 원시 값을 수집해야 합니다. 요청 매개변수 외에도 모든 oauth_* 매개변수가 서명에 포함되어야 하므로 이러한 것도 수집합니다. 다음은 요청 승인의 매개변수입니다: 이 값들은 나중에 사용될 단일 문자열로 인코딩되어야 합니다. 문자열을 구성하는 프로세스는 매우 구체적입니다:
  1. 서명될 모든 키와 값을 퍼센트 인코딩합니다.
  2. 인코딩된 키 [2]를 기준으로 매개변수 목록을 알파벳순으로 [1] 정렬합니다.
  3. 각 키/값 쌍에 대해:
  4. 인코딩된 키를 출력 문자열에 추가합니다.
  5. ’=’ 문자를 출력 문자열에 추가합니다.
  6. 인코딩된 값을 출력 문자열에 추가합니다.
  7. 남은 키/값 쌍이 더 있는 경우 ’&’ 문자를 출력 문자열에 추가합니다.
[1] OAuth 명세는 사전순으로 정렬하도록 지시하며, 이는 많은 라이브러리의 기본 알파벳 정렬입니다. [2] 동일한 인코딩된 키를 가진 두 개의 매개변수가 있는 경우, OAuth 명세는 값을 기준으로 정렬을 계속하도록 지시합니다. 그러나 X는 API 요청에서 중복된 키를 허용하지 않습니다. Parameter string 위에서 수집한 매개변수로 이러한 단계를 반복하면 다음 _parameter string_이 생성됩니다:

Signature base string 생성

지금까지 수집한 세 개의 값은 서명이 생성될 단일 문자열로 결합되어야 합니다. 이를 OAuth 명세에서는 signature base string이라고 합니다. HTTP 메서드, base URL 및 parameter string을 단일 문자열로 인코딩하려면:
  1. HTTP 메서드를 대문자로 변환하고 출력 문자열을 이 값과 동일하게 설정합니다.
  2. ’&’ 문자를 출력 문자열에 추가합니다.
  3. URL을 퍼센트 인코딩하고 출력 문자열에 추가합니다.
  4. ’&’ 문자를 출력 문자열에 추가합니다.
  5. parameter string을 퍼센트 인코딩하고 출력 문자열에 추가합니다.
이렇게 하면 다음 _signature base string_이 생성됩니다:
parameter string을 반드시 퍼센트 인코딩하세요. signature base string에는 정확히 2개의 앰퍼샌드 ’&’ 문자가 포함되어야 합니다. parameter string의 퍼센트 ’%’ 문자는 signature base string에서 %25로 인코딩되어야 합니다.

서명 키 얻기

수집해야 할 마지막 데이터는 요청을 하는 X 앱과 요청이 대신하는 사용자를 식별하는 시크릿입니다. 이러한 값은 매우 민감하며 절대 아무와 공유해서는 안 된다는 점에 유의하는 것이 매우 중요합니다. X에 앱을 식별하는 값은 consumer secret이라고 하며 Developer Console에서 앱 세부 정보 페이지를 통해 찾을 수 있습니다. 이 값은 X 앱이 보내는 모든 요청에 대해 동일합니다. 애플리케이션이 대신하여 작동하는 계정을 식별하는 값을 OAuth token secret이라고 합니다. 이 값은 여러 가지 방법으로 얻을 수 있으며, 모두 access token 얻기에 설명되어 있습니다. 다시 한번, 이러한 값을 애플리케이션에 비공개로 유지하는 것이 매우 중요합니다. 값이 유출되었다고 느껴진다면 토큰을 재생성하세요(이 페이지의 토큰은 실제 요청에 대해 유효하지 않은 것으로 표시되어 있습니다). 이 두 값을 결합하여 서명을 생성하는 데 사용될 서명 키를 만들어야 합니다. 서명 키는 단순히 퍼센트 인코딩된 token secret입니다: request token 얻기와 같이 token secret이 아직 알려지지 않은 일부 흐름이 있습니다. 이 경우 서명 키는 퍼센트 인코딩consumer secret 뒤에 앰퍼샌드 문자 ’&‘로 구성되어야 합니다.

서명 계산

마지막으로, signature base string과 서명 키를 HMAC-SHA1 해싱 알고리즘에 전달하여 서명이 계산됩니다. 알고리즘의 세부 사항은 hash_hmac 함수로 설명됩니다. HMAC 서명 함수의 출력은 이진 문자열입니다. 이는 서명 문자열을 생성하기 위해 base64 인코딩되어야 합니다. 예를 들어, 이 페이지에서 제공된 base string과 서명 키에 대한 출력은 2E CF 77 84 98 99 6D 0D DA 90 5D C7 17 7C 75 07 3F 3F CD 4E입니다. 그 값을 base64로 변환한 것이 이 요청에 대한 OAuth 서명입니다: