# Autenticação e Autorização

O padrão oAuth2 é utilizado para autenticação e autorização. Todas as requisições devem possuir um http header “Authorization” que deve conter os dados de autenticação;

### Autenticação simples

A autenticação simples segue o padrão Basic Http Auth (<https://tools.ietf.org/html/rfc7617>), que basicamente é o envio do prefixo “Basic” concatenado com o schema encodado em base 64. O schema é definido por “username:otp”.

Request Ex:

| Authorization | Basic \<schema encodado em base64> |
| ------------- | ---------------------------------- |

Existem quatro escopos OAuth que podem ser utilizados:

* **single\_signature**: Token que permite a assinatura de apenas um hash, sendo invalidado após a sua utilização.
* **multi\_signature**: Token que permite a assinatura de múltiplos hashes em uma única requisição, sendo invalidado após a sua utilização.
* **signature\_session**: Token de sessão OAuth que permite várias assinaturas em várias chamadas à API, desde que o token esteja dentro do prazo de validade ou que não tenha sido revogado pela aplicação ou pelo usuário.
* **authentication\_session:** Token de sessão OAuth para autenticação do titular, não permitindo a realização de assinaturas ou outras utilizações da chave privada

**Observação:** Caso nenhum escopo seja informado, será considerado por padrão o **authentication\_session**.

### Autenticação com abertura de sessão

A autenticação com abertura de sessão envolve um parâmetro adicional para especificar se o access token será retornado ou não, no qual será o lifetime da sessão e se a sessão será automaticamente finalizada no fim da transação.

&#x20;   Caso seja enviado a flag “returnAccessToken” com o valor true, na resposta http do serviço será recebido o header “VCSchemaData”, que conterá o access token, o lifetime (da sessão) e o provider (id da nuvem configurado na variável de ambiente urlsMultiCloud).

&#x20;   Quando enviado o parâmetro lifetime, deve  ser enviado o tempo da sessão em segundos (respeitando as regras do provedor de serviços de criptografia em uso). Caso não seja enviado, o CESS irá utilizar o lifetime padrão da instância/aplicação.

&#x20;   Caso seja enviado o parâmetro autoRevoke com o valor false, ele irá desativar a revogação automática da sessão no fim da transação (útil para reuso de uma autenticação por um período)

Request Ex:

| Authorization | Basic \<schema encodado em base64>                  |
| ------------- | --------------------------------------------------- |
| VCSchemaCfg   | returnAccessToken=true;lifetime=999;autoRevoke=true |

Response Ex:

| VCSchemaData | accessToken;lifetime;provider |
| ------------ | ----------------------------- |

### Autenticação com sessão já aberta

Request Ex:

| Authorization | Bearer \<token de acesso> |
| ------------- | ------------------------- |

### Autenticação especial

A autenticação especial deve ocorrer através do Vault Cloud Schema (Somente para provedores crypto pki indicados).

O Schema pode ser definido da seguinte forma:

1. username:otp
2. username:otp\@ip
3. username:otp\@ip:port
4. username|accesstoken
5. username|accesstoken\@ip
6. username|accesstoken\@ip:port
7. provider-username:otp
8. provider-username:otp\@ip
9. provider-username:otp\@ip:port
10. provider-username|accesstoken
11. provider-username|accesstoken\@ip
12. provider-username|acesstoken\@ip:port

Request Ex:

| Authorization | VCSchema \<schema encodado em base64> |
| ------------- | ------------------------------------- |

### Revogar sessão

O serviço funciona para assinaturas attached (conteúdo anexado na assinatura) e detached (conteúdo não anexado na assinatura).

<mark style="color:green;">`POST`</mark> `http://cess.local/revoke`

#### Headers

| Name         | Type   | Description      |
| ------------ | ------ | ---------------- |
| Content-Type | string | application/json |

#### Request Body

| Name  | Type   | Description                                           |
| ----- | ------ | ----------------------------------------------------- |
| token | string | Token de acesso recebido durante a abertura de sessão |

{% tabs %}
{% tab title="200 " %}

```
{
    "revoked": true
}
```

{% endtab %}
{% endtabs %}
