메인 콘텐츠로 건너뛰기
OAuth Echo는 API와 상호작용하는 동안 제3자에게 OAuth 인가를 안전하게 위임하는 방법입니다.
이 상호작용에는 네 가지 주체가 관여합니다:
- User — 특정 권한이 부여된 X 애플리케이션을 통해 X를 사용하는 사용자
- Consumer — 제3자 미디어 제공자(예: 사진 공유 사이트)와 상호작용하려는 X 애플리케이션
- Delegator — 제3자 미디어 제공자
- Service Provider — 즉, X 자체
요점은 애플리케이션과 사용자를 대신해 Delegator가 X API로 보낼 요청을 준비하는 것입니다. 원래라면 서명되어야 하는 OAuth 요청을 HTTP 헤더에 담고, Delegator가 중간 작업을 완료한 뒤 그 요청을 X로 전송하도록 합니다.
예를 들어, User가 사진을 업로드하려고 한다고 가정합니다. Consumer는 POST로 Delegator의 업로드를 호출합니다. POST에는 이미지가 포함되어야 하며, 다음 두 가지 항목을 HTTP 헤더로 추가로 포함해야 합니다:
x-auth-service-provider — 신원 위임이 전송될 대상(영역)입니다. X의 경우 https://api.x.com/1.1/account/verify_credentials.json 로 설정합니다. iOS5 기반 X 통합은 이 URL에 추가 매개변수인 application_id를 덧붙이며, 이는 x-verify-credentials-authorization에서 사용되는 oauth_signature를 계산할 때도 사용됩니다.
x-verify-credentials-authorization — Consumer는 OAuth를 사용하여 HTTP 헤더에서 https://api.x.com/1.1/account/verify_credentials.json 를 호출할 수 있도록 필요한 모든 OAuth 매개변수를 생성해야 합니다(예: OAuth oauth_consumer_key=”…”, oauth_token=”…”, oauth_signature_method=”…”, oauth_signature=”…”, oauth_timestamp=”…”, oauth_nonce=”…”, oauth_version=”…” 형식).
전체 트랜잭션이 oauth_timestamp 가 여전히 유효한 시간 안에 완료되어야 함을 유의하십시오.
또는, 이 두 매개변수를 헤더 대신 POST 본문에 x_auth_service_provider 및 x_verify_credentials_authorization 로 보낼 수도 있습니다. 이 경우, 일반적인 요청에서 매개변수를 인코딩하듯 OAuth 서명 베이스 문자열에 해당 매개변수를 이스케이프하여 포함해야 합니다. 작업을 가능한 한 분리하기 위해서는 HTTP 헤더를 사용하는 편이 가장 좋습니다.
이 시점에서 Delegator의 목표는 미디어를 저장하기 전에 User가 실제로 본인인지 확인하는 것입니다. Delegator가 업로드 메서드를 통해 위의 모든 데이터를 수신하면 이미지를 임시로 저장한 다음, Consumer가 x-verify-credentials-authorization 헤더에서 제공한 동일한 OAuth 인증 헤더를 사용하여 x-auth-service-provider 헤더에 지정된 엔드포인트(이 경우 https://api.x.com/1.1/account/verify_credentials.json)로 호출을 구성해야 합니다.
조회에는 하드코딩된 값이 아닌 x-auth-service-provider에서 제공한 URL을 사용하세요. 예를 들어 Apple iOS는 모든 OAuth 요청에 추가로 application_id 매개변수를 포함하며, 이 값은 OAuth Echo의 각 단계에서 유지되어야 합니다.
OAuth 인가 단계에서는 x-verify-credentials-authorization의 헤더 값을 가져와 서비스 제공자에 대한 호출에서 별도의 Authorization 헤더로 설정하세요. 추가로, x-auth-service-provider에 담긴 값이 올바른지 확인하세요.
- 서비스 제공자가 HTTP 200을 반환하면 정상입니다. Delegator는 이미지를 영구적으로 저장하고 URL을 생성해 반환해야 합니다.
- 서비스 제공자가 HTTP 200을 반환하지 않으면 이미지를 폐기하고 Consumer에게 오류를 반환하세요.