Pular para o conteúdo principal

Autorizando uma solicitação

O objetivo deste documento é mostrar como modificar solicitações HTTP para enviar solicitações autorizadas à X API. Todas as APIs da X são baseadas no protocolo HTTP. Isso significa que qualquer software que você desenvolver e que utilize as APIs da X enviará uma série de mensagens estruturadas aos servidores da X. Por exemplo, uma solicitação para publicar o texto “Hello Ladies + Gentlemen, a signed OAuth request!” como um Tweet será semelhante a isto:
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.x.com

status=Olá%20senhoras%20e%20senhores%2c%20uma%20requisição%20OAuth%20assinada%21
Qualquer biblioteca HTTP deve conseguir gerar e enviar a solicitação acima com pouca dificuldade. No entanto, a solicitação acima é considerada inválida, pois não há como saber:
  1. Qual aplicativo está fazendo a solicitação
  2. Em nome de qual usuário a solicitação está publicando
  3. Se o usuário concedeu ao aplicativo autorização para publicar em seu nome
  4. Se a solicitação foi adulterada por um terceiro durante o trânsito
Para permitir que os aplicativos forneçam essas informações, a API do X depende do protocolo OAuth 1.0a. Em termos bastante simplificados, a implementação do X exige que solicitações que precisem de autorização contenham um cabeçalho HTTP Authorization adicional com informações suficientes para responder às perguntas listadas acima. Uma versão da solicitação HTTP mostrada acima, modificada para incluir esse cabeçalho, fica assim (normalmente o cabeçalho Authorization precisaria estar em uma única linha, mas foi quebrado aqui para facilitar a leitura):
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Authorization:
OAuth oauth\_consumer\_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth\_signature\_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
Content-Length: 76
Host: api.x.com

status=Olá%20senhoras%20e%20senhores%2c%20uma%20requisição%20OAuth%20assinada%21
Quando esta solicitação foi criada, ela teria sido aceita pela X API como válida. Se esse processo de assinatura parecer além do escopo da sua integração, considere usar Web Intents, que não precisam usar OAuth para interagir com a X API.   Coletando parâmetros Você deve notar que o header contém 7 pares chave/valor, em que todas as chaves começam com a string “oauth_”. Para qualquer solicitação da X API, coletar esses 7 valores e criar um header semelhante permitirá especificar a autorização da solicitação. A seguir descrevemos como cada valor foi gerado: Consumer key O oauth_consumer_key identifica qual aplicação está fazendo a solicitação. Obtenha esse valor na página de configurações da sua X App no portal do desenvolvedor.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce O parâmetro oauth_nonce é um token exclusivo que sua aplicação deve gerar para cada solicitação. A X usará esse valor para determinar se uma solicitação foi enviada várias vezes. O valor desta solicitação foi gerado codificando em base64 32 bytes de dados aleatórios e removendo todos os caracteres não alfanuméricos, mas qualquer abordagem que produza uma string alfanumérica relativamente aleatória é aceitável aqui.
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
Signature O parâmetro oauth_signature contém um valor gerado ao processar todos os demais parâmetros da solicitação e dois valores secretos por meio de um algoritmo de assinatura. A finalidade da assinatura é permitir que a X verifique que a solicitação não foi modificada durante o tráfego, valide o aplicativo que está enviando a solicitação e confirme que o aplicativo tem autorização para interagir com a conta do usuário. O processo para calcular a oauth_signature para esta solicitação é descrito em Creating a signature.
oauth_signaturetnnArxj06cWHq44gCs1OSKk/jLY=
Método de assinatura O oauth_signature_method usado pela X é HMAC-SHA1. Esse valor deve ser usado em qualquer solicitação autorizada enviada à X API.
oauth_signature_methodHMAC-SHA1
Timestamp O parâmetro oauth_timestamp indica quando a solicitação foi criada. Esse valor deve ser o número de segundos desde a época Unix no momento em que a solicitação é gerada e pode ser facilmente obtido na maioria das linguagens de programação. A X rejeitará solicitações criadas há muito tempo; portanto, é importante manter o relógio do computador que gera as solicitações sincronizado com o NTP.
oauth_timestamp1318622958
Token O parâmetro oauth_token normalmente representa a permissão de um usuário para compartilhar acesso à sua conta com seu aplicativo. Há algumas solicitações de autenticação em que esse valor não é enviado ou é um tipo diferente de token, mas essas são abordadas em detalhes em Obtaining access tokens. Para a maioria das solicitações de uso geral, você usará o que é chamado de um access token. Você pode gerar um access token válido para sua conta na página de configurações do seu X App no portal do desenvolvedor.
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
Versão O parâmetro oauth_version deve ser sempre 1.0 para qualquer solicitação enviada à X API.
oauth_version1.0

Construindo a string de cabeçalho

Para construir a string de cabeçalho, imagine escrever em uma string chamada DST.
  1. Anexe a string “OAuth ” (incluindo o espaço no final) a DST.
  2. Para cada par chave/valor dos 7 parâmetros listados acima:
    1. Codifique com percent-encoding a chave e anexe-a a DST.
    2. Anexe o caractere de igual ‘=’ a DST.
    3. Anexe uma aspa dupla ‘”’ a DST.
    4. Codifique com percent-encoding o valor e anexe-o a DST.
    5. Anexe uma aspa dupla ‘”’ a DST.
    6. Se ainda houver pares chave/valor, anexe uma vírgula ‘,’ e um espaço ‘ ‘ a DST.
Dê atenção especial ao percent-encoding dos valores ao construir essa string. Por exemplo, o valor de oauth_signature tnnArxj06cWHq44gCs1OSKk/jLY= deve ser codificado como tnnArxj06cWHq44gCs1OSKk%2FjLY%3D. A aplicação dessas etapas aos parâmetros coletados acima resulta na seguinte string:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"
Esse valor deve ser definido como o cabeçalho Authorization da requisição.
I