# Introdução

O FACETID (facet ID) é um identificador único usado em FIDO2/WebAuthn para aplicativos Android que fornece:

| Recurso | Descrição |
|  --- | --- |
| Verificação de Identidade do App | Ele identifica de forma única **qual aplicativo Android** está solicitando credenciais FIDO2, com base no **certificado de assinatura** do aplicativo. |
| Previne Falsificação de Aplicativos | Apenas o aplicativo assinado com o **mesmo certificado** pode acessar as credenciais criadas sob aquele FACETID. Isso protege contra aplicativos maliciosos que fingem ser seu aplicativo. |
| Vinculação de Credenciais | As credenciais FIDO2 (chaves públicas) são **vinculadas ao FACETID**, garantindo que só possam ser usadas pelo mesmo aplicativo no futuro. |
| Âncora de Confiança no WebAuthn | O FACETID é enviado durante o registro e autenticação. As partes confiáveis o utilizam para **validar a origem do aplicativo** e impor controle de acesso a nível de aplicativo. |


Para usar o Belvo Android SDK para autenticação biométrica, você precisa gerar um FACETID para seu aplicativo. Isso é essencial para operações FIDO2/WebAuthn e é usado para garantir que as credenciais estejam seguramente vinculadas ao seu aplicativo. Neste guia, vamos orientá-lo pelos passos para gerar um FACETID para seu aplicativo Android.

## Gerando FACETID

Para gerar o FACETID do seu aplicativo:

1. Localize o certificado de assinatura do seu aplicativo (geralmente **.jks** ou **.keystore**). Por exemplo: my-release-key.jks
2. Exporte o certificado de assinatura no formato **.der**.


```shell Exportar Certificado de Assinatura
## Exportar o certificado
keytool -exportcert \
  -alias your-key-alias \
  -keystore my-release-key.jks \
  -storepass your-keystore-password \
  -rfc > cert.pem

## Converter para o formato DER
openssl x509 -in cert.pem -outform DER -out cert.der
```

1. Gere o hash SHA-256 do certificado


```shell Gerar Hash SHA-256
openssl dgst -sha256 -binary cert.der | openssl base64 -A
```

1. Converta Base64 para Base64URL:
  - Substitua `+` por `-`
  - Substitua `/` por `_`
  - Remova o preenchimento `=` no final da string.


Por exemplo, `nabc65V09KlcsLjIWTnaRB8PKXagy9Lbai/5ahhSE08=` torna-se `nabc65V09KlcsLjIWTnaRB8PKXagy9Lbai_5ahhSE08`.

1. Construa o FACETID


```shell Exemplo de Construção do FACETID
## Formato do FACETID
android:apk-key-hash:<base64url_encoded_hash>

## Exemplo com hash codificado em Base64URL
android:apk-key-hash:nabc65V09KlcsLjIWTnaRB8PKXagy9Lbai_5ahhSE08
```

1. Compartilhe seu FACETID com a Belvo.


Feito!
Feito! Você gerou com sucesso o FACETID do seu aplicativo. Depois de compartilhá-lo com a Belvo, você pode continuar com a integração do SDK Android da Belvo para pagamentos biométricos.

## Script Prático

Nossa fantástica equipe de desenvolvedores criou um script prático para ajudar a automatizar o processo de geração do FACETID.

**Como usar:**

1. Salve o código abaixo como `generate_facetid.sh`.
2. Atualize as variáveis `KEYSTORE_PATH`, `ALIAS` e `STOREPASS` com os detalhes do seu aplicativo.
3. Torne o script executável: `chmod +x generate_facetid.sh`
4. Execute o script: `./generate_facetid.sh`


Confira abaixo:

```bash FACETID Generation Script
#!/bin/bash

# === CONFIGURAÇÃO ===
KEYSTORE_PATH="my-release-key.jks"
ALIAS="your-key-alias"
STOREPASS="your-keystore-password"

# === ARQUIVOS TEMPORÁRIOS ===
CERT_PEM="cert.pem"
CERT_DER="cert.der"

# === 1. Exportar cert em formato PEM ===
echo "[*] Exportando cert para PEM..."
keytool -exportcert -alias "$ALIAS" -keystore "$KEYSTORE_PATH" -storepass "$STOREPASS" -rfc > "$CERT_PEM"

# === 2. Converter PEM para DER ===
echo "[*] Convertendo PEM para DER..."
openssl x509 -in "$CERT_PEM" -outform DER -out "$CERT_DER"

# === 3. Hash SHA-256 + Base64 ===
echo "[*] Gerando hash SHA-256..."
BASE64_HASH=$(openssl dgst -sha256 -binary "$CERT_DER" | openssl base64 -A)

# === 4. Converter Base64 para Base64URL ===
FACET_HASH=$(echo "$BASE64_HASH" | tr '+/' '-_' | tr -d '=')

# === 5. Saída ===
echo ""
echo "✅ FACETID:"
echo "android:apk-key-hash:$FACET_HASH"
```