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

# Autorizando uma solicitação

> Construa um header Authorization OAuth 1.0a para assinar solicitações da X API, incluindo consumer key, nonce, signature, timestamp, token e version.

export const Button = ({href, children}) => {
  return <div className="not-prose group">
    <a href={href}>
      <button className="flex items-center space-x-2.5 py-1 px-4 bg-primary-dark dark:bg-white text-white dark:text-gray-950 rounded-full group-hover:opacity-[0.9] font-medium">
        <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>;
};

### Autorizando uma solicitação

O objetivo deste documento é mostrar como modificar solicitações HTTP para enviar solicitações autorizadas à X API.

Todas as APIs do X são baseadas no protocolo HTTP. Isso significa que qualquer software que você escreva usando as APIs do X envia uma série de mensagens estruturadas para os servidores do X. Por exemplo, uma solicitação para publicar o texto “**Hello Ladies + Gentlemen, a signed OAuth request!**” como um Tweet será mais ou menos assim:

```
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=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
```

Qualquer biblioteca HTTP deve ser capaz de gerar e emitir a solicitação acima com pouca dificuldade. No entanto, a solicitação acima é considerada inválida, pois não há como saber:

1. Qual aplicação está fazendo a solicitação
2. Em nome de qual usuário a solicitação está publicando
3. Se o usuário concedeu à aplicação autorização para publicar em seu nome
4. Se a solicitação foi adulterada por terceiros em trânsito

Para permitir que as aplicações forneçam essas informações, a API do X se baseia no [protocolo OAuth 1.0a](http://tools.ietf.org/html/rfc5849). Em um nível bem simplificado, a implementação do X exige que solicitações que requerem autorização contenham um header 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 header, se parece com isto (normalmente o header Authorization precisa ficar em uma única linha, mas foi quebrado aqui para melhor 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=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
```

Quando esta solicitação foi criada, ela seria aceita como válida pela X API.

Se este processo de assinatura parece estar fora do escopo da sua integração, considere usar [Web Intents](https://dev.x.com/web/intents), que não precisam usar OAuth para interagir com a X API.

**Coletando parâmetros**

Você deve conseguir ver 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. Como cada valor foi gerado é descrito abaixo:

**Consumer key**

O oauth\_consumer\_key identifica qual aplicação está fazendo a solicitação. Obtenha esse valor na página de configurações do seu [X app](/resources/fundamentals/developer-apps) no [Developer Console](/resources/fundamentals/developer-portal).

|                      |                        |
| :------------------- | :--------------------- |
| oauth\_consumer\_key | xvz1evFS4wEEPTGEFPHBog |

**Nonce**

O parâmetro oauth\_nonce é um token único que sua aplicação deve gerar para cada solicitação única. O 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-word, mas qualquer abordagem que produza uma string alfanumérica relativamente aleatória deve funcionar aqui.

|              |                                            |
| :----------- | :----------------------------------------- |
| oauth\_nonce | kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg |

**Signature**

O parâmetro oauth\_signature contém um valor gerado ao passar todos os outros parâmetros da solicitação e dois valores secretos por um algoritmo de assinatura. O propósito da assinatura é permitir que o X verifique se a solicitação não foi modificada em trânsito, verifique a aplicação que envia a solicitação e verifique se a aplicação tem autorização para interagir com a conta do usuário.

O processo para calcular o oauth\_signature desta solicitação é descrito em [Criando uma assinatura](/resources/fundamentals/authentication/oauth-1-0a/creating-a-signature).

|                  |                              |
| :--------------- | :--------------------------- |
| oauth\_signature | tnnArxj06cWHq44gCs1OSKk/jLY= |

**Signature method**

O oauth\_signature\_method usado pelo X é HMAC-SHA1. Esse valor deve ser usado para qualquer solicitação autorizada enviada à API do X.

|                          |           |
| :----------------------- | :-------- |
| oauth\_signature\_method | HMAC-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 epoch Unix no momento em que a solicitação é gerada, e deve ser fácil de gerar na maioria das linguagens de programação. O X rejeitará solicitações criadas em um passado muito distante, então é importante manter o relógio do computador que gera as solicitações sincronizado via NTP.

|                  |            |
| :--------------- | :--------- |
| oauth\_timestamp | 1318622958 |

**Token**

O parâmetro oauth\_token normalmente representa a permissão de um usuário para compartilhar acesso à sua conta com sua aplicação. Existem algumas solicitações de autenticação em que esse valor não é passado ou é outra forma de token, mas essas são abordadas em detalhes em [Obtendo access tokens](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens). Para a maioria das solicitações de uso geral, você usará o que chamamos de **access token**.

Você pode gerar um [access token](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens) válido para sua conta na página de configurações do seu [X app](/resources/fundamentals/developer-apps) no [Developer Console](/resources/fundamentals/developer-portal).

|              |                                                    |
| :----------- | :------------------------------------------------- |
| oauth\_token | 370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |

**Version**

O parâmetro oauth\_version deve sempre ser 1.0 em qualquer solicitação enviada à API do X.

|                |     |
| :------------- | :-- |
| oauth\_version | 1.0 |

#### Construindo a string do header

Para construir a string do header, imagine que você está escrevendo 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. Faça o [percent encode](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens) da chave e anexe-a a DST.
   2. Anexe o caractere de igual ‘=’ a DST.
   3. Anexe aspas duplas ‘”’ a DST.
   4. Faça o [percent encode](/resources/fundamentals/authentication/oauth-1-0a/obtaining-user-access-tokens) do valor e anexe-o a DST.
   5. Anexe aspas duplas ‘”’ a DST.
   6. Se houver mais pares chave/valor, anexe uma vírgula ‘,’ e um espaço ‘ ‘ a DST.

Preste 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.

Executar esses passos com os 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 header Authorization da solicitação.
