> For the complete documentation index, see [llms.txt](https://favelaware.gitbook.io/favelaware/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://favelaware.gitbook.io/favelaware/9-api/9.4-autenticacao-em-apis.md).

# 9.4 - Autenticação em APIs

Para garantir segurança e controle de acesso, as APIs utilizam diferentes **métodos de autenticação**. Abaixo estão os principais:

## 🔑 **Chaves de API (API Keys)**

* São **strings únicas** geradas pelo servidor, associadas a um usuário ou aplicação.
* Enviadas com a requisição (geralmente no header ou na URL) para **identificar quem está acessando a API**.
* São simples de usar, mas **menos seguras**, pois podem ser facilmente expostas se o código for público.

#### 📌 Exemplo:

{% code title="http" %}

```javascript
GET https://api.exemplo.com/dados?api_key=123abc456def

```

{% endcode %}

#### 📦 **Uso comum**:

* APIs públicas com limitações (ex: Google Maps, OpenWeather).
* Monitoramento básico de uso por usuário/aplicação.

#### 🟢 **Vantagens:**

* Simplicidade: Fácil de implementar e usar.
* Boa para serviços simples ou públicos.
* Pode ser usada para monitorar e controlar o uso da API.

#### 🔴 **Desvantagens:**

* Segurança limitada: A chave pode ser facilmente exposta se não protegida corretamente.
* Sem controle granular: Geralmente não diferencia usuários nem permissões.
* Sem mecanismo nativo para expiração ou revogação rápida.

***

## 🔐 **OAuth (Open Authorization)**

* Protocolo padrão para **autenticação segura e delegada**.
* Permite que um app acesse dados do usuário **sem precisar saber sua senha**.
* Muito usado por grandes plataformas como **Google, Facebook, GitHub, Twitter**, etc.

#### 🧭 **Como funciona (fluxo simplificado)**:

1. O usuário é redirecionado para fazer login no serviço (ex: Google).
2. Ele autoriza o app a acessar determinados dados.
3. Um **token de acesso** é gerado e enviado ao app.
4. O app usa esse token para fazer requisições autenticadas.

#### 📌 **Exemplo de uso**:

* Login com Google/Facebook em sites e apps.

#### 🟢 **Vantagens:**

* Alto nível de segurança: Não expõe as credenciais do usuário.
* Permite controle granular de permissões via escopos.
* Suporta autenticação delegada e acesso temporário.
* Amplamente adotado por grandes plataformas (Google, Facebook, etc).

#### 🔴 **Desvantagens:**

* Complexidade maior para implementar e entender.
* Fluxo de autenticação pode ser mais demorado para o usuário.
* Requer mais configurações no servidor e cliente.

***

## 🪪 **JWT (JSON Web Tokens)**

* Tokens **compactos, seguros e autocontidos** em formato JSON.
* Usados para **autenticação e troca de informações entre partes confiáveis**.
* Contêm três partes codificadas em Base64:

  * **Header** (tipo e algoritmo).
  * **Payload** (informações do usuário ou permissões).
  * **Signature** (verificação de integridade).

#### 📌 **Exemplo de estrutura**:

{% code title="nginx" %}

```javascript
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImdhYmJ1Iiwicm9sZSI6InVzZXIiLCJleHAiOjE3MDAwMDAwMDB9.abc123..."
}

```

{% endcode %}

#### 📦 **Uso comum**:

* APIs REST que exigem autenticação com sessões stateless (sem guardar estado no servidor).
* Aplicações modernas com login baseado em token.

#### 🟢 **Vantagens:**

* Stateless: O servidor não precisa armazenar sessões.
* Compacto e auto-contido, facilita transporte em headers HTTP.
* Pode incluir informações úteis no payload (ex: permissões).
* Permite autenticação e autorização eficientes.

#### 🔴 **Desvantagens:**

* O token pode ficar muito grande se incluir muitos dados.
* Se vazado, o token pode ser usado até expirar (revogação é complexa).
* Payload é codificado, mas não criptografado — não deve conter dados sensíveis.
* Requer uso de HTTPS para segurança.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://favelaware.gitbook.io/favelaware/9-api/9.4-autenticacao-em-apis.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
