Criando uma assinatura
Esta página explica como gerar uma assinatura OAuth 1.0a HMAC-SHA1 para uma solicitação HTTP. Essa assinatura será adequada para passar à X API como parte de uma solicitação autorizada, conforme descrito em autorizando uma solicitação. A solicitação usada para demonstrar a assinatura é um POST para https://api.x.com/1.1/statuses/update.json. A solicitação crua se parece com isto:| HTTP Method | POST |
Coletando parâmetros
Em seguida, reúna todos os parâmetros incluídos na solicitação. Existem dois lugares para esses parâmetros adicionais — a URL (como parte da query string) e o corpo da solicitação. A solicitação de exemplo inclui um único parâmetro em cada local:| status | Hello Ladies + Gentlemen, a signed OAuth request! |
| include_entities | true |
| oauth_consumer_key | xvz1evFS4wEEPTGEFPHBog |
| oauth_nonce | kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg |
| oauth_signature_method | HMAC-SHA1 |
| oauth_timestamp | 1318622958 |
| oauth_token | 370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |
| oauth_version | 1.0 |
- Faça o percent encode de cada chave e valor que será assinado.
- Ordene a lista de parâmetros em ordem alfabética [1] pela chave codificada [2].
- Para cada par chave/valor:
- Anexe a chave codificada à string de saída.
- Anexe o caractere ‘=’ à string de saída.
- Anexe o valor codificado à string de saída.
- Se houver mais pares chave/valor, anexe um caractere ‘&’ à string de saída.
| status | Hello Ladies + Gentlemen, a signed OAuth request! |
|---|---|
include_entities | true |
oauth_consumer_key | xvz1evFS4wEEPTGEFPHBog |
oauth_nonce | kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg |
oauth_signature_method | HMAC-SHA1 |
oauth_timestamp | 1318622958 |
oauth_token | 370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |
oauth_version | 1.0 |
Criando a signature base string
Os três valores coletados até aqui devem ser unidos em uma única string, a partir da qual a assinatura será gerada. Ela é chamada de signature base string pela especificação OAuth. Para codificar o método HTTP, a base URL e a parameter string em uma única string:- Converta o método HTTP para maiúsculas e defina a string de saída como esse valor.
- Anexe o caractere ‘&’ à string de saída.
- Faça o percent encode da URL e anexe-a à string de saída.
- Anexe o caractere ‘&’ à string de saída.
- Faça o percent encode da parameter string e anexe-a à string de saída.
Obtendo uma signing key
Os últimos dados a coletar são os segredos que identificam o X app fazendo a solicitação e o usuário em nome do qual a solicitação está sendo feita. É muito importante notar que esses valores são incrivelmente sensíveis e nunca devem ser compartilhados com ninguém. O valor que identifica seu app para o X é chamado de consumer secret e pode ser encontrado no Developer Console visualizando a página de detalhes do app. Ele será o mesmo para toda solicitação enviada pelo seu X app.| Consumer secret | kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw |
| OAuth token secret | LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE |
| Signing key | kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE |
Calculando a assinatura
Por fim, a assinatura é calculada passando a signature base string e a signing key pelo algoritmo de hashing HMAC-SHA1. Os detalhes do algoritmo são explicados como função hash_hmac. A saída da função de assinatura HMAC é uma string binária. Ela precisa ser codificada em base64 para produzir a string da assinatura. Por exemplo, a saída dada a base string e a signing key desta página é 2E CF 77 84 98 99 6D 0D DA 90 5D C7 17 7C 75 07 3F 3F CD 4E. Esse valor, convertido para base64, é a assinatura OAuth desta solicitação:| OAuth signature | Ls93hJiZbQ3akF3HF3x1Bz8/zU4= |