Asset

Identifica um recurso de forma exclusiva.

Um ativo digital é uma entidade on-line identificável e endereçável que normalmente oferece algum serviço ou conteúdo. Exemplos de recursos são sites, aplicativos Android, feeds do Twitter e páginas do Google+.

Representação JSON
{
  // Union field, only one of the following:
  "web": {
    object(WebAsset)
  },
  "androidApp": {
    object(AndroidAppAsset)
  },
}
Nome do campo Tipo Descrição
campo "Union", apenas um dos seguintes:
web object(WebAsset) Defina se este é um recurso da Web.
androidApp object(AndroidAppAsset) Defina se este for um recurso de link para app Android.

WebAsset

Descreve um recurso da Web.

Representação JSON
{
  "site": string,
}
Nome do campo Tipo Descrição
site string

Os recursos da Web são identificados por um URL que contém somente o esquema, o nome do host e as partes da porta. O formato é

http[s]://<hostname>[:<port>]

Os nomes de host precisam estar totalmente qualificados e terminar em um único ponto (".").

Apenas os esquemas "http" e "https" são permitidos no momento.

Os números de porta são fornecidos como decimais e precisam ser omitidos se os números de porta padrão forem usados: 80 para http e 443 para https.

Chamamos esse URL limitado de "site". Todos os URLs que compartilham o mesmo esquema, nome do host e porta são considerados parte do site e, portanto, pertencem ao recurso da Web.

Exemplo: o recurso com o site https://www.google.com contém todos estes URLs:

  • https://www.google.com/
  • https://www.google.com:443/
  • https://www.google.com/foo
  • https://www.google.com/foo?bar
  • https://www.google.com/foo#bar
  • https://user@password:www.google.com/

Mas ele não contém estes URLs:

  • http://www.google.com/ (esquema incorreto)
  • https://google.com/ (o nome do host não corresponde)
  • https://www.google.com:444/ (a porta não corresponde) OBRIGATÓRIO

AndroidAppAsset

Descreve um recurso de link para app Android.

Representação JSON
{
  "packageName": string,
  "certificate": {
    object(CertificateInfo)
  },
}
Nome do campo Tipo Descrição
packageName string Os recursos de link para app Android são naturalmente identificados pelo nome do pacote Java. Por exemplo, o app Google Maps usa o nome de pacote com.google.android.apps.maps. REQUIRED
certificate object(CertificateInfo)

Como não há aplicação global da exclusividade do nome do pacote, também exigimos um certificado de assinatura que, em combinação com o nome do pacote, identifique um app de maneira exclusiva.

As chaves de assinatura de alguns apps são alternadas. Por isso, elas podem ser assinadas por chaves diferentes ao longo do tempo. Tratamos esses itens como recursos distintos, já que usamos (nome do pacote, certificado) como o ID exclusivo. Normalmente, isso não deve causar problemas, já que as duas versões do app vão fazer declarações iguais ou semelhantes. No entanto, outros recursos que fizerem declarações sobre o app vão precisar ser atualizados quando uma chave for rotacionada.

As sintaxes para publicação e consulta de instruções contêm facilidade sintática para permitir facilmente a especificação de apps conhecidos por vários certificados. REQUIRED

CertificateInfo

Descreve um certificado X509.

Representação JSON
{
  "sha256Fingerprint": string,
}
Nome do campo Tipo Descrição
sha256Fingerprint string

Impressão digital SHA-265 em maiúsculas do certificado. No certificado PEM, ele pode ser adquirido assim:

$ keytool -printcert -file $CERTFILE | grep SHA256:
SHA256: 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
    42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5

ou assim:

$ openssl x509 -in $CERTFILE -noout -fingerprint -sha256
SHA256 Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
    16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5

Neste exemplo, o conteúdo desse campo é 14:6D:E9:83:C5:73: 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF: 44:E5.

Se essas ferramentas não estiverem disponíveis para você, converta o certificado PEM no formato DER, calcule o hash SHA-256 dessa string e represente o resultado como uma string hexadecimal (ou seja, representações hexadecimais em maiúsculas de cada octeto, separadas por dois pontos).