> For the complete documentation index, see [llms.txt](https://docs.caf.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.caf.io/caf-sdk/caf-sdk-pt-br/web-javascript/getting-started/smartauth.md).

# Smart Auth

### **Remoto**

Inclua o **.js** arquivo diretamente da CDN:

```html
<script
  src="https://repo.combateafraude.com/identity/<VERSION>/index.umd.js"
  type="text/javascript"
></script>
```

### Versões atuais

| SDK      | Categoria    | Versão                                                                 |
| -------- | ------------ | ---------------------------------------------------------------------- |
| Identity | Mais recente | [`1.1.3`](https://repo.combateafraude.com/identity/1.1.3/index.umd.js) |
| Identity | Estável      | [`1.1.2`](https://repo.combateafraude.com/identity/1.1.2/index.umd.js) |

## **Utilização**

### **Criando uma instância do SDK**

O método construtor do SDK recebe o token de Identity como parâmetro (veja como obter o seu [**aqui**](https://docs.caf.io/caf-docs/user-guide/smart-auth/access-token)). Além disso, você pode inserir opcionalmente as opções de inicialização do SDK.

### **Exemplo usando importação via CDN:**

```html
<script
  src="https://repo.combateafraude.com/identity/<VERSION>/index.umd.js"
  type="text/javascript"
></script>

[...]

<script>
  const identityToken = "seu token";
  const identity = new this["@combateafraude/identity-sdk"].Sdk(identityToken);
</script>
```

{% hint style="info" %}
A partir da versão 0.0.33, os parâmetros de opções incluem a personalização do título, subtítulo, descrição e texto do botão de cada página, as cores de fundo e de texto do modal e a posição do timer (que pode ser "UP" ou "DOWN").
{% endhint %}

## `Opções` parâmetros:

| **Campo**                        | **Tipo**   | **Obrigatório?** | **Descrição**                                                                                                                                                                                                                                                                                               |
| -------------------------------- | ---------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`mobileToken`**                | `string`   | Não\*            | Um válido [token](https://docs.caf.io/caf-sdk/authentication) para prova de vida passiva em SDKs móveis.                                                                                                                                                                                                    |
| **`throwOnRecall`**              | `booleano` | Não              | Indica se, ao ser chamada uma segunda vez sem que a primeira chamada tenha sido concluída, o SDK deve gerar um erro. Se não for informado ou for informado **false**, o SDK retorna o existente **Promise** sem disparar um erro. Se **true**for informado, o SDK rejeita a **Promise** na segunda chamada. |
| **`theme`**                      | objeto     | Não              | Para ver todos os parâmetros disponíveis em **`theme`** [**clique aqui**](#theme-parameters).                                                                                                                                                                                                               |
| **`smsLabel`**                   | objeto     | Não              | Para ver todos os parâmetros disponíveis em **`label`** [**clique aqui**](#label-parameters).                                                                                                                                                                                                               |
| **`emailLabel`**                 | objeto     | Não              | Para ver todos os parâmetros disponíveis em **`label`** [**clique aqui**](#label-parameters).                                                                                                                                                                                                               |
| **`pendingPageSettings`**        | objeto     | Não              | Para ver todos os parâmetros disponíveis em **`pendingPageSettings`** [**clique aqui**](#pendingpagesettings).                                                                                                                                                                                              |
| **`faceLivenessSettings`**       | objeto     | Não              | Define os estilos de autenticação facial **`faceLivenessSettings`** [**clique aqui**](#facelivenesssettings-parameters).                                                                                                                                                                                    |
| **`smsSettings`**                | objeto     | Não              | Define os estilos de autenticação por SMS **`smsSettings`** [**clique aqui**](#smssettings-parameters).                                                                                                                                                                                                     |
| **`emailSettings`**              | objeto     | Não              | Define os estilos de autenticação por e-mail **`emailSettings`** [**clique aqui**](#emailsettings-parameters).                                                                                                                                                                                              |
| **`authIcon`**                   | string     | Não              | Ícone usado no topo das telas de autenticação                                                                                                                                                                                                                                                               |
| **`enableTimer`**                | booleano   | Não              | Ativa ou desativa o timer em caso de validação por SMS e e-mail                                                                                                                                                                                                                                             |
| **`enableLocationRetry`**        | booleano   | Não              | Ativa a nova tentativa na coleta de geolocalização, sem alta precisão na segunda tentativa. O valor padrão é falso.                                                                                                                                                                                         |
| **`gpsAuthenticationSettings`**  | objeto     | Não              | Para ver todos os parâmetros disponíveis em **`gpsAuthenticationSettings`** [**clique aqui**](#gpsauthenticationsettings-parameters).                                                                                                                                                                       |
| **`successPageDisplayDuration`** | número     | Não              | Tempo em milissegundos que a página de resultado (sucesso ou erro) permanece visível antes de fechar automaticamente. **Padrão: 3000**.                                                                                                                                                                     |
| **`timerPosition`**              | string     | Não              | Posição do timer em caso de validação por SMS e e-mail (pode ser "DOWN" ou "UP")                                                                                                                                                                                                                            |
| **`language`**                   | string     | Não              | Define o idioma usado nos textos do SDK **`padrão: pt-BR`**                                                                                                                                                                                                                                                 |
| **`metadata`**                   | string     | Não              | Este campo aceita apenas strings formatadas em JSON. Portanto, ao enviar dados para este campo, a string deve estar em um formato JSON válido.                                                                                                                                                              |

\*Você deve informar mobileToken quando estiver usando autenticação facial em sua política

{% hint style="info" %}
Agora é possível alterar o provedor de liveness usado na autenticação facial configurando o mobileToken.\nEntre em contato com nossa equipe de suporte para escolher o melhor provedor para o seu caso de uso.\nProvedores de liveness atualmente suportados: **CAF**, **iProov**, **FaceTec**e **Payface**.
{% endhint %}

## `Tema` parâmetros:

| **Campo**                    | **Tipo** | **Obrigatório?** | **Descrição**                                    |
| ---------------------------- | -------- | ---------------- | ------------------------------------------------ |
| **`closeButton`**            | string   | Não              | Cor usada no botão de fechar                     |
| **`checkmark`**              | string   | Não              | Cor usada no botão checkMark                     |
| **`loader`**                 | string   | Não              | Cor usada no botão de carregamento               |
| **`buttonSuccessColor`**     | string   | Não              | Cor usada no botão de sucesso                    |
| **`buttonSuccessTextColor`** | string   | Não              | Cor usada no texto do botão de sucesso           |
| **`inputSuccessColor`**      | string   | Não              | Cor usada na entrada de código                   |
| **`buttonFinishColor`**      | string   | Não              | Cor usada na entrada de código                   |
| **`timerBackgroundColor`**   | string   | Não              | Cor usada no fundo do timer se ele estiver ativo |
| **`timerColor`**             | string   | Não              | Cor usada no texto do timer se ele estiver ativo |
| **`modalBackgroundColor`**   | string   | Não              | Cor usada no fundo do modal de autenticação      |
| **`textColor`**              | string   | Não              | Cor usada no texto do modal de autenticação      |

## `Rótulo` parâmetros:

| **Campo**    | **Tipo** | **Obrigatório?** | **Descrição**               |
| ------------ | -------- | ---------------- | --------------------------- |
| **`ativar`** | string   | Não              | Ativa ou desativa o `label` |
| **`link`**   | string   | Não              | Link de redirecionamento    |
| **`text`**   | string   | Não              | Texto usado no `label`      |

## `pendingPageSettings` parâmetros:

| **Campo**               | **Tipo** | **Obrigatório?** | **Descrição**                                             |
| ----------------------- | -------- | ---------------- | --------------------------------------------------------- |
| **`pendingIconSvg`**    | string   | Não              | Altera o ícone exibido quando a `PendingPage` está aberta |
| **`titleText`**         | string   | Não              | Título da `PendingPage`                                   |
| **`descriptionText`**   | string   | Não              | Descrição da `PendingPage`                                |
| **`buttonContentText`** | string   | Não              | Texto usado no `PendingPage` botão de confirmação         |

## `faceLivenessSettings` parâmetros:

| **Campo**             | **Tipo** | **Obrigatório?** | **Descrição**                                                                |
| --------------------- | -------- | ---------------- | ---------------------------------------------------------------------------- |
| **`startButton`**     | `objeto` | Não              | Altera o botão de início **`styles`** [**clique aqui**](#styles-parameters). |
| **`titleText`**       | string   | Não              | Título da `faceLivenessPage`                                                 |
| **`subtitleText`**    | string   | Não              | Subtítulo da `faceLivenessPage`                                              |
| **`descriptionText`** | string   | Não              | Descrição da `faceLivenessPage`                                              |

## `gpsAuthenticationSettings` parâmetros:

| **Campo**         | **Tipo** | **Obrigatório?** | **Descrição**                                                                                |
| ----------------- | -------- | ---------------- | -------------------------------------------------------------------------------------------- |
| **`maxAttempts`** | `número` | Não              | Número máximo de tentativas de coleta de GPS durante o fluxo de autenticação. **Padrão: 3**. |

## `smsSettings` parâmetros:

| **Campo**               | **Tipo** | **Obrigatório?** | **Descrição**                                     |
| ----------------------- | -------- | ---------------- | ------------------------------------------------- |
| **`titleText`**         | string   | Não              | Título da `smsCodePage`                           |
| **`subtitleText`**      | string   | Não              | Subtítulo da `smsCodePage`                        |
| **`buttonContentText`** | string   | Não              | Texto usado no `smsCodePage` botão de confirmação |

## `emailSettings` parâmetros:

| **Campo**               | **Tipo** | **Obrigatório?** | **Descrição**                                       |
| ----------------------- | -------- | ---------------- | --------------------------------------------------- |
| **`titleText`**         | string   | Não              | Título da `emailCodePage`                           |
| **`subtitleText`**      | string   | Não              | Subtítulo da `emailCodePage`                        |
| **`buttonContentText`** | string   | Não              | Texto usado no `emailCodePage` botão de confirmação |

## `styles` parâmetros:

| **Campo**          | **Tipo** | **Obrigatório?** | **Descrição**                  |
| ------------------ | -------- | ---------------- | ------------------------------ |
| **`label`**        | string   | Não              | Altera o texto do botão        |
| **`color`**        | string   | Não              | Altera a cor do texto do botão |
| **`cor de fundo`** | string   | Não              | Altera a cor do plano de fundo |
| **`borderRadius`** | string   | Não              | Altera o raio da borda         |
| **`border`**       | string   | Não              | Altera a borda                 |

Exemplo:

```javascript
const identityOptions = {
mobileToken: 'seu token mobile',
throwOnRecall: true,
theme: {
    closeButton: '#000037',
    pendingIconSvg:'./example.svg'
    checkmark: "#000037",
    loader: "#000037",
    buttonSuccessColor: "000037",
    buttonSuccessTextColor: "000037",
    inputSuccessColor: "#f6ff00",
    buttonFinishColor: "#00ff0d",
    timerBackgroundColor: "000037",
    timerColor: "white",
    modalBackgroundColor: '000037',
    textColor: '000037'

},
smsLabel: {
    enable: true,
    link: "https://www.google.com/",
    text: "É apenas um SMS de teste",
},
language: "string",
pendingPageSettings: {
        pendingIconSvg:'./example.svg',
        titleText: "Não foi possível realizar a autenticação",
        descriptionText: "Para sua segurança, entre em contato com o suporte para prosseguir",buttonContentText: "Finalizar"
    },
faceLivenessSettings: {
      startButton:{
        label: 'Tirar foto',
        color: "white",// aceita valor hexadecimal também,
        backgroundColor: "#000037",
        border: '1px solid #000037'
      },
        titleText:"insere um titulo",
        subtitleText:"um subtitulo",
        descriptionText:"uma descrição"
},
smsSettings:{
        titleText:"insere um titulo",
        subtitleText:"um subtitulo",
        buttonContentText: 'Validar token sms',
    },
emailSettings:{
        titleText:"insere um titulo",
        subtitleText:"um subtitulo",
        buttonContentText: 'Validar token email',
    },
gpsAuthenticationSettings: {
    maxAttempts: 3,
},
successPageDisplayDuration: 3000,
enableTimer: true,
timerPosition: "UP",
authIcon:  (new Image().src = "./exemple-sdk.png"),
metadata: "{\"teste\":{\"dados\":{\"name\":\"JohnDoe\",\"personId\":\"999.999.999.99\",}}}",
};

const identityToken = 'seu token';

const identity = new IdentitySdk(identityToken, identityOptions);
```

**Chamando o SDK:**

Para verificar um usuário, use o **`verifyPolicy`** método, disponível na instância do SDK.

Você deve informar o personId do usuário e [**o ID da policy**](https://docs.caf.io/caf-docs/user-guide/smart-auth/getting-started#access-policies) a ser usado.

{% hint style="info" %}
A partir da versão 1.0.0, você pode usar o **personId** parâmetro como alternativa ao CPF para identificação do usuário.

* personId pode ser não numérico.
* Caracteres permitidos: letras, números e os caracteres especiais `@ . _ -` (sem espaços).
* Tamanho: entre 5 e 254 caracteres.
* Se o personId contiver apenas números e os caracteres `. - /`, esses caracteres serão removidos e o valor será interpretado como uma máscara de documento.

Isso permite maior flexibilidade para a identificação do usuário nos seus fluxos de autenticação.
{% endhint %}

```javascript
const personId = "ID do usuário";
const policyId = "ID da policy";

const response = await identity.verifyPolicy(personId, policyId);

if (identity.isSdkError(response)) {
  // Erro ao executar o SDK
} else {
  const { isAuthorized, attestation, attemptId } = response;

  if (isAuthorized) {
    // Usuário autorizado
    // Envie a attestation para o seu backend e valide-a lá
  } else {
    // Usuário não autorizado
  }
}
```


---

# 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://docs.caf.io/caf-sdk/caf-sdk-pt-br/web-javascript/getting-started/smartauth.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.
