v1.6
Table of Contents | ||||
---|---|---|---|---|
|
1. Introdução
Informações de contato e URIs.
1.1. Contato
Em caso de dúvidas ou dificuldades na integração você pode entrar em contato conosco abrindo um chamado em: https://valid-sa.atlassian.net/servicedesk/customer/portal/4/group/115/create/51 ou pelo email produtos.certificadora@valid.com.
Inclua em seu email os dados abaixo:
Expand | ||
---|---|---|
| ||
Identificação Nome: Telefone: Email: Nome da empresa:
Sobre o negócio Explique o que a sua empresa faz (600 caracteres):
Know How Já trabalhou com PKI (Public Key infrastructure) ou Criptografia? [ ] Sim, ambos [ ] Sim, PKI [ ] Sim, Criptografia [ ] Não
Precisa de ajuda para: [ ] Cadastro de aplicação [ ] Obtenção dos Certificados e baixa dos aplicativos [ ] Emissão dos certificados de teste [ ] Obtenção de autorização para assinatura [ ] Assinatura digital [ ] Configurar local da assinatura [ ] Testes [ ] Outro |
1.1. URIs base do Valid PSC
Produção: https://certificado.vidaas.com.br
Homologação: https://hml-certificado.vidaas.com.br
2. Cadastro de Aplicação
Para utilizar os serviços de autorização e assinatura é obrigatório cadastrar sua aplicação junto ao Valid PSC, este serviço para cadastro é realizado uma única vez. Abaixo a descrição do serviço para cadastro de aplicação. Para obtenção de autorização e assinatura é obrigatório cadastrar sua aplicação junto ao Valid PSC, este serviço para cadastro é realizado uma única vez. Abaixo a descrição do serviço para cadastro de aplicação.
Solicitação de cadastro:
Path : <URI-base>/v0/oauth/application
Verbo HTTP: POST
Cabeçalho:
Content-type: application/json
Accept: application/json
Corpo da requisição no formato "application/json;charset=UTF-8"
name: obrigatório, nome/descrição da aplicação;
comments: obrigatório, observações gerais de uso da aplicação;
redirect_uris: obrigatório, URI’s autorizadas para redirecionamento (para serviços de código de autorização);
email: obrigatório, e-mail para suporte em caso de indisponibilidade, mudança de versão, entre outros.
Exemplo de requisição:
Code Block |
---|
{ "name": "App Demo", "comments": "App Demo Observação", "redirect_uris": ["https://valid.com.br"], "email": "demo@valid.com" } |
Exemplo de resposta:
Code Block |
---|
{ "status": "success", "message": "New Client Application registered with Sucess", "client_id": "4c9fb552-0387-4e5f-8727-6676fa88dce1", "client_secret": "Ny2n3hq67gQEFvH7" } |
Observação:
Os parâmetros de retorno “client_id” e “client_secret” devem ser armazenadas na sua aplicação que serão parâmetros nas chamadas de outros serviços para autorização e assinatura.
O parâmetro “redirect_uris“ é utilizado para armazenar todas as URIs que poderão ser utilizadas posteriormente pela aplicação no redirecionamento do usuário após a assinatura ser realizada.
3. Uso da API
Os próximos tópicos descrevem como utilizar a API para realizar autenticações e assinaturas digitais.
3.1. Autorização e Autenticação
Serviço para obter do titular a autorização de uso da sua chave privada, com solicitação de fatores de autenticação através de QR Code ou notificação enviada para o celular do titular (Push).
Em ambos os casos, o usuário digitará a senha de seu certificado e se a senha for digitada corretamente, a sua aplicação receberá a autorização de acordo com o escopo solicitado.
Recomendamos que implemente os dois médotos (QR Code e Notificação) na sua aplicação, permitindo que o próprio usuário escolha o método de autenticação. Isso melhora a experiência do usuário e aumenta a disponibilidade do serviço.
3.1.1. Solicitação de autorização por QR Code
Através de um link, uma página com QR Code é disponibilizada para que o usuário faça a autorização. Após realizada essa autorização, a página redireciona para a uri pré-definida.
A página com o QR Code ficará aguardando por 2 minutos o titular da chave privada autenticar com o aplicativo ViDaas.
a) Jornada do usuário autorizando o uso da chave privada via leitura de QR Code no app Vidaas
b) Resposta da Requisição de Código de Autorização (Receive Code)
Ao autorizar o uso pelo titular, o Valid PSC emite um código de autorização com tempo de validade curto e retorna para aplicação cliente com uma URI de redirecionamento contendo parâmetros no componente http query, usando o formato "application/x-www- form-urlencoded":
Caso o titular não autorize o uso, o Valid PSC aguardará o tempo de expiração do QRCODE e irá exibir a mensagem conforme imagem abaixo:
c) Endpoint
Abaixo os parâmetros necessários para utilização deste método:
Path : <URI-base>/v0/oauth/authorize
Verbo HTTP: GET
Parâmetros da requisição no formato "Query Params"
client_id: obrigatório, deve conter a identificação da aplicação;
code_challenge: obrigatório, ver RFC 7636. Utilizado para assegurar integridade com a solicitação da autorização e com a geração do access_token que será visto adiante. Utiliza OAuth com PKCE para geração do par code challenge e code verifier. Caso precise, fazendo uma busca na internet, pode-se encontrar geradores online dessas chaves;
code_challenge_method: obrigatório, valor “S256” (ver RFC 7636);
response_type: obrigatório, valor "code".
scope: opcional, se não informado será considerado "single_signature" (preferencialmente deve ser informado o tipo do escopo desejado porque o valor padrão pode mudar). Possíveis valores para o parâmetro:
single_signature: token que permite a assinatura de apenas um conteúdo (hash), sendo invalidado após a sua utilização;
multi_signature: token que permite a assinatura de multiplos 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 a 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 apenas para autenticação e que não permite uso da chave privada do usuário.
login_hint: deixar em branco.
lifetime: opcional, indica o tempo de vida desejado para o token a ser gerado. Inteiro, em segundos. O valor máximo varia com o tipo de certificado:
Pessoa Física: até 7 dias;
Pessoa Jurídica: até 30 dias;
Nota: Neste caso é importante conhecer a rotina do seu usuário. Alguns parceiros utilizam esse parâmetro de forma em que o usuário final escolhe por quanto tempo poderá ficar sem precisar inserir a senha novamente.
Sugestão: A duração da sessão pode ser implementada de acordo com a rotina do usuário, por exemplo, um médico que realiza um plantão de doze horas deveria ter uma sessão de 43200 s.
redirect_uri: obrigatório, deve conter uma uri informada anteriormente na criação da aplicação.
state: opcional.
Exemplo de requisição:
Code Block |
---|
PATH_BASE/oauth/authorize?client_id=4c9fb552-0387-4e5f-8727-6676fa88dce1&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM&code_challenge_method=S256&response_type=code&scope=signature_session&login_hint=12345678901&lifetime=900&redirect_uri=http://valid.com.br |
Exemplo de resposta:
Code Block |
---|
<REDIRECT_URI>?code=eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..eELj_2mmWoulp2GebJcc0g.dHvIy9cz0k8ytJbE-vC4gv0ZI-R8CaB_-KlEUj-u-yt3IMNoGJDSpGPaxz0SPjICK_MMm72B06uQvQlJijBbMzSrWA0XM7YLpdCazwP7SWxhCQdQzRiuLXawdv8guFqA9iwYtOqhNNDzHvcxNSvds3mskERHaUEl2hyZkMdZH31o29gWmHRzi7AFsTgDXMjJ.c6kHZoweiW_Zz9cKfIO4DA&state=NONE |
3.1.2. Solicitação por notificação no celular (Push)
Nesse método, o signatário receberá uma notificação em seu celular, solicitando a assinatura pelo aplicativo VIDaaS:
a) Jornada do usuário: Usuário fornecendo a autorização através da notificação
b) Endpoint
Path : <URI-base>/v0/oauth/authorize
Verbo HTTP: GET
Parâmetros da requisição no formato "Query Params"
client_id: obrigatório, deve conter a identificação da aplicação;
code_challenge: obrigatório, ver RFC 7636. Utilizado para assegurar integridade com a solicitação da autorização e com a geração do access_token que será visto adiante. Utiliza OAuth com PKCE para geração do par code challenge e code verifier. Caso precise, fazendo uma busca na internet, pode-se encontrar geradores online dessas chaves;
code_challenge_method: obrigatório, valor “S256” (ver RFC 7636);
response_type: obrigatório, valor "code".
scope: opcional, se não informado, será considerado "single_signature" (preferencialmente deve ser informado o tipo do escopo desejado porque o valor padrão pode mudar). Possíveis valores para o parâmetro:
single_signature: token que permite a assinatura de apenas um conteúdo (hash), sendo invalidado após a sua utilização;
multi_signature: token que permite a assinatura de multiplos 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 a 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 apenas para autenticação e que não permite uso da chave privada do usuário.
login_hint: obrigatório, informar CPF ou CNPJ do titular a que se destina a requisição.
lifetime: opcional, indica o tempo de vida desejado para o token a ser gerado. Inteiro, em segundos;
redirect_uri: informar apenas o valor “push://” no parâmetro.
Exemplo de requisição:
Code Block |
---|
PATH_BASE/oauth/authorize?client_id=4c9fb552-0387-4e5f-8727-6676fa88dce1&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM&code_challenge_method=S256&response_type=code&scope=signature_session&login_hint=12345678901&lifetime=900&redirect_uri=push:// |
Exemplo de resposta com PUSH:
Code Block |
---|
code=d402d71c-0918-43ca-a07d-62597f559497 |
c) Importante! Realizando uma autenticação através do “authentications” ao solicitar autorização por push
Esse método deve ser utilizado somente para casos de solicitação por notificação (Push) e permite saber se o titular realizou a “assinatura” que lhe foi solicitada.
Por se tratar de uma operação assíncrona, esse método deve ser chamado recorrentemente até que retorne o conteúdo com o “autorizationToken”.
Importante informar que a “recorrência“ deve ocorrer “com intervalo de tempo de no mínimo 1 segundo“. Chamadas menores do que esse intervalo estarão sujeitas ao bloqueio da aplicação.
Path : <URI-base>/valid/api/v1/trusted-services/authentications
Verbo HTTP: GET
Parâmetros da requisição no formato "Query Params"
◦ code: obrigatório, deve conter código retornado pelo método authorize
Exemplo de solicitação de status da autenticação:
Code Block |
---|
<URI-base>/valid/api/v1/trusted-services/authentications?code=d402d71c-0918-43ca-a07d-62597f559497 |
Exemplo de resposta:
Code Block |
---|
{ "authorizationToken": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..nYWhIcwNUH_22Upe1BSUTQ.oXT7UF2Mvtm5C6CjpdEGxcL_9XM86oNh4w0iGgUkQVGBla0CNnNW0_QbGx73Ldnu81kydOuztSj3wfWUQf3t7IftvVMuyfdi-gW4_lz1LcC2q3p9N32iSEGb5VPzzSKqiZGa3asfMgEPjr3xYo7Lo3biTtbVPrChPLHslMi--b7DXXOIZ23N2R5bCT2_h6pj6PyBnXsEWl5uaF9v5PSXsQ.ZuLdlRZkfGBoqrxbj5tgTg", "redirectUrl": "push://<URI gerada no cadastro de aplicação>?code=8b1bde77-3647-4d76-1289-a2ec97c75a4d&state=NONE" } |
3.1.3 Obter a chave para autenticação de documentos com o “token”
Retorna o “access_token”.
Path : <URI-base>/v0/oauth/token
Verbo HTTP: POST
Parâmetros da requisição no formato "application/x-www-form-urlencoded"
grant_type: obrigatório, valor "authorization_code";
client_id: obrigatório, deve conter a identificação da aplicação;
client_secret: obrigatório, deve conter o segredo associado à aplicação;
code_verifier: obrigatório, informar a chave que corresponde ao code_challenge enviado na Requisição de Código de Autorização (ver RFC 7636).
code: obrigatório, deve conter código de autorização retornado do Serviço Código de Autorização;
Observações:
Para o método Authorize QR Code deve-se alterar o campo "code" pelo "code" retornado.
Para o método Authorize PUSH deve-se alterar o campo "code" pelo "authorizationToken" retornado no Authentications.
Exemplo de requisição:
Code Block |
---|
{ "grant_type": "authorization_code", "client_id": "4c9fb552-0387-4e5f-8727-6676fa88dce1", "client_secret": Ny2n3hq67gQEFvH7, "code": "<authorization code>", "code_verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk" } |
Exemplo de resposta:
Code Block |
---|
{ "access_token": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..2tk9rh8yisesxBm1tNNcUg.z6VZu-HZJk-a9EDBSAgDrtZWgYn5je__nCc6uOOrl3wsCrzWT5G0SMUHpuX3McdBk0uIJ85cMOe3MFn75Pe5mfhlmdLtRUtnX_tJmg8rW6dU7mg4nR4XlyMmWYy-Yep_2dIM2xni0sWUplPxUCLg9dl7_aeVTB_U9TmsXOYCJNMYSJfjPErsthUNHWJHzUIOg-2Otj9gkq_EBLr0jYVWCw.IPOs5b_o6yKmz2Q24zYYvA", "token_type": "Bearer", "expires_in": 900, "scope": "signature_session", "authorized_identification": "12345678901", "authorized_identification_type": "CPF" } |
3.2. Assinaturas digitais em documentos com o “Signature”
Utilizado para realizar assinaturas digitais em documentos de no máximo 7 MB.
Path: <URI-base>/v0/oauth/signature
Verbo HTTP: POST
Parâmetros da requisição no formato "raw"
Content-type: application/json;
Accept : application/json;
Authorization: Bearer access_token (obtido anteriormente);
Parâmetros: formato "application/json;charset=UTF-8" :
certificate_alias: opcional, identificador do certificado correspondente à chave utilizada na assinatura.
hashes: conjunto com valores referentes a documentos a serem assinados. Cada elemento do conjunto conterá:
id: identificador do conteúdo a ser assinado;
alias: forma legível do identificador do conteúdo;
hash: conteúdo a ser assinado, deve ser convertido inicialmente em SHA256 e posteriormente em base64;
hash_algorithm: Object Identifier (OID) do algoritimo de hash. Por exemplo, para SHA256 utilize o OID 2.16.840.1.101.3.4.2.1;;
signature_format: formato da assinatura, por exemplo:
RAW: resultado direto (em base64) da operação RSA sobre o hash informado na requisição.
CMS: PKCS#7 detached contendo os seguintes atributos assinados:
- contentType
- signingTime (hora do PSC)
- messageDigest (hash informado pela aplicação na requisição)
- signingCertificateV2 (certificado do assinante);
padding_method: opcional,
pdf_signature_page: opcional, acrescenta página no PDF mostrando a assinatura digital, podendo ter o valor "true" ou "false", por padrão é definido o valor "false",
base64_content: opcional, conteúdo em base64 a ser assinado. Por exemplo Texto ou PDF a ser assinado em base64.
Observações:
A aplicação suporta os seguintes “signature_format”: RAW_DATA, CMS, CAdES_AD_RT, CAdES_AD_RB, PAdES_AD_RT, PAdES_AD_RB, RAW_DIGESTED_DATA.
A aplicação suporta os seguintes “padding_method”: NONE, PKCS1V1_5, PSS. Método usado para complementar o tamanho de 256 bytes do dado a ser assinado. O mais utilizado é o PKCS1V1_5.
Exemplo de requisição:
Code Block |
---|
{ "hashes": [ { "id": "dummy assinatura", "alias": "dummy.pdf", "hash": "FqulOTrXLABB9WAK08LFLsQ3ovDH/Aj638PA/pZB16M=", "hash_algorithm": "2.16.840.1.101.3.4.2.1", "signature_format": "RAW" } ] } |
Exemplo de resposta:
Code Block |
---|
{ "signatures": [ { "id": "dummy assinatura", "raw_signature": "my signature base64" } ], "certificate_alias": "CERTIFICADO TESTE" } |
Info |
---|
Por questão de ilustração, neste exemplo, não é passado o documento para assinatura, somente seu hash. Porém, se o parâmetro base64_content for informado, o retorno será o documento assinado em base64 e para decodificar, é necessário retirar as quebras de linha “\r\n” antes. |
3.3 Serviço para encontrar um titular mediante informação de CPF ou CNPJ (“user-discovery”).
Antes de chamar a aplicação para autenticação, você pode verificar se um CPF ou CNPJ existe no Valid PSC e listar os certificados disponíveis para ele.
Solicitação do serviço:
Path: <URI-base>/v0/oauth/user-discovery
Verbo HTTP: POST
Corpo da requisição no formato "application/json;charset=UTF-8"
client_id: obrigatório, deve conter a identificação da aplicação;
client_secret: obrigatório, deve conter o segredo associado à aplicação;
user_cpf_cnpj: obrigatório, deve conter “CPF” para pessoa física ou “CNPJ” pessoa jurídica;
val_cpf_cnpj: obrigatório, deve conter o valor do cpf ou cnpj.
Exemplo de requisição:
Code Block |
---|
{ "client_id": "4c9fb552-0387-4e5f-8727-6676fa88dce1", "client_secret": "Ny2n3hq67gQEFvH7", "user_cpf_cnpj": "CPF", "val_cpf_cnpj": "12345678901" } |
Exemplos de respostas:
2.1 - Status S
Code Block |
---|
{ "status": "S", "slots": [ { "slot_alias": "a4c2b5bc-ee20-492a-9908-45d892f2e808", "label": "e-CPF A3 em nuvem gold" }, { "slot_alias": "8e8353d5-e786-4822-9666-603bd966ee58", "label": "e-CPF A3 em nuvem gold" } ] } |
2.2 - Status N
Code Block |
---|
{ "status": "N" } |
Info |
---|
Observação 1 Status de retorno indicando “S” para resultado positivo ou “N” caso não exista certificado válido para o CPF pesquisado. |
Info |
---|
Observação 2: O endpoint retorna apenas certificados válidos? Sim. No entanto, serão considerados válidos certificados que estejam com sua validade normativa dentro do prazo. Certificados válidos mas que não tenham renovado a sua licença comercial, também serão tratados como certificados válidos. |
3.4 Extração da chave pública com o “Public Certificate”
Utilizado para extração da chave pública em base64 do signatário de um documento.
Para utilização dessa função deve-se utilizar o “certificate_alias” gerado no Sinature e do “access_token” gerado no endpoit Token.
Path : <URI-base>/v0/oauth/certificate-discovery
Verbo HTTP: GET
Parâmetros da requisição no formato "Query Params"
◦ token (authorizathion bearer): obrigatório, deve conter código retornado do Serviço de Token.
◦ certificate_alias: obrigatório, deve conter código retornado do Serviço de Assinatura (Signature).
Exemplo de resposta:
Code Block |
---|
{ "status": "S", "certificates": [ { "alias": "28938fd0-954d-4cff-8f69-a159b70e3d1f", "certificate": "-----BEGIN CERTIFICATE-----\r\nMIIHuzCCBaOgAwIBAgIINVGKh7BTogEwDQYJKoZIhvcNAQELBQAwdDELMAkGA1UE\r\nBhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEg\r\nZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEYMBYGA1UEAxMPQUMg\r\nVkFMSUQgUkZCIHY1MB4XDTIyMDcxMzE4MTI1MFoXDTI3MDcxMjE4MTI1MFowgfsx\r\nCzAJBgNVBAYTAkJSMRMwEQYDVQQKEwpJQ1AtQnJhc2lsMTYwNAYDVQQLEy1TZWNy\r\nZXRhcmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFTATBgNV\r\nBAsTDFJGQiBlLUNQRiBBMzEOMAwGA1UECxMFVkFMSUQxFDASBgNVBAsTC0FSIFZB\r\nTElEIENEMRkwFwYDVQQLExBWaWRlb2NvbmZlcmVuY2lhMRcwFQYDVQQLEw4xNDEy\r\nMTk1NzAwMDEwOTEuMCwGA1UEAxMlTUFSQ0VMTyBERU5JUyBERSBPTElWRUlSQTox\r\nMTI3MDQ2ODg4MDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALHYwp/K\r\nmYRMnOueizCFtLfeT2uiBjBXnRlIe5PNpMSQy2cfSs+6qwYP+Xg2Jis8T/UY8jZp\r\nVdMrjlkm/s9tYAbhuLA8bIwlOlq9quMFp2IR2P5C3zyJN3uH+Nq0ZXlxUVfwz0wC\r\nvLt94BnnmOIImpf7Tdwr1y3bmh9Hz86BKUElUEh9esVXMAqc4HAUVa3NjOlsiBr5\r\nmh8uUwaGO3c+5RduTKvFDMjS4YB6m1oVej7yKmGa8/mcdgk4xrMhgiwULcKquDnO\r\nzba80WSKq4UMns0JSI1tvWatvhdjWhcH5z7dDVgYexDTed/eEYEhcqyS+SwKsi2f\r\ndPc2u2kXRUmrBh8CAwEAAaOCAscwggLDMIGcBggrBgEFBQcBAQSBjzCBjDBVBggr\r\nBgEFBQcwAoZJaHR0cDovL2ljcC1icmFzaWwudmFsaWRjZXJ0aWZpY2Fkb3JhLmNv\r\nbS5ici9hYy12YWxpZHJmYi9hYy12YWxpZHJmYnY1LnA3YjAzBggrBgEFBQcwAYYn\r\naHR0cDovL29jc3B2NS52YWxpZGNlcnRpZmljYWRvcmEuY29tLmJyMAkGA1UdEwQC\r\nMAAwHwYDVR0jBBgwFoAUU8ul5HVQmUAsvlsVRcm+yzCqicUwcAYDVR0gBGkwZzBl\r\nBgZgTAECAyQwWzBZBggrBgEFBQcCARZNaHR0cDovL2ljcC1icmFzaWwudmFsaWRj\r\nZXJ0aWZpY2Fkb3JhLmNvbS5ici9hYy12YWxpZHJmYi9kcGMtYWMtdmFsaWRyZmJ2\r\nNS5wZGYwgbYGA1UdHwSBrjCBqzBToFGgT4ZNaHR0cDovL2ljcC1icmFzaWwudmFs\r\naWRjZXJ0aWZpY2Fkb3JhLmNvbS5ici9hYy12YWxpZHJmYi9sY3ItYWMtdmFsaWRy\r\nZmJ2NS5jcmwwVKBSoFCGTmh0dHA6Ly9pY3AtYnJhc2lsMi52YWxpZGNlcnRpZmlj\r\nYWRvcmEuY29tLmJyL2FjLXZhbGlkcmZiL2xjci1hYy12YWxpZHJmYnY1LmNybDAO\r\nBgNVHQ8BAf8EBAMCBeAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGb\r\nBgNVHREEgZMwgZCBG21hcmNlbG8uZG9saXZlaXJhQHZhbGlkLmNvbaA4BgVgTAED\r\nAaAvBC0yMDEwMTk2ODExMjcwNDY4ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw\r\nMDCgFwYFYEwBAwagDgQMMDAwMDAwMDAwMDAwoB4GBWBMAQMFoBUEEzAwMDAwMDAw\r\nMDAwMDAwMDAwMDAwDQYJKoZIhvcNAQELBQADggIBAEBck43Df/MN2LI1B/HF7qlx\r\noP4p8s4fr2+hm1BIyh2O+eEvhGUSKj1YkILQrrcBtjRCbtzdJuPvj0QPh87WN/BS\r\nBvVulla8vpK/W+RsVqurjX06wF/jtR5CL8gLvG0boX716de16j+Bacu3w0TeWego\r\n1wegR9R3caUaxnIvy22N05U86xYi+Ppep32wuLepoC+VE4hBPPAARMb4Vs3eqavB\r\nUsdaoYJR8ODLZYTLds9NGEYrWrH7XCB3hgq536xX0nBdqekmfirmbRfGx44bk3Sx\r\nFycoiAoZwfXISKFxbfV6im8dZK5+vf8L8Z9MSJVwZsWU+WZ6sWY43Rj/adL5eAg0\r\npoo24Br4aBY2CZIjT8raNl35WH+8VhYcnCgQSF+Zj7Gz9PMiAKje3i4rxpQXzh3L\r\nVDmuSXMKrKRSUJEWEGknpdKi9gYO6EVR9l70qFyIrafBS/4aH4hEchpFQkgjkGrc\r\n71gSGXoirDcvX3cdQTAkuLZG4gxG8EOg4Fmu2zxUFuTcKXoA78LdRGrQ2HQ6EtYh\r\nlB8KTVkJeri1+Kx6q9OXbq7RWmuIu48h89+3t1o+pdznBq1Q5g9Etlg0PN/wmxBY\r\nMoCZ1LxmiH4G7akTOp1Roc7R/tCIowV5YYLCkzetAYD5dZdUfx3fGOxanmVgJjBX\r\nSwfACcDYtG3cz7yeP/Qs\r\n-----END CERTIFICATE-----\r\n" } ] } |
4. Observações sobre o modelo de negócios
a) O que é a licença comercial ou “Direito de uso”?
Quando um certificado A3 em nuvem é emitido, ele é criado com validade normativa de 5 anos. No entanto, comercialmente o usuário terá adquirido um período menor, de 1 ano em geral. Quando este prazo de licença comercial, ou, “Direito de uso” tiver acabado, ele poderá adquirir licenças adicionais, ampliando o direito de utilização, sem que precise realizar o processo e validação.
b) Todos os usuários podem ser bloqueados?
Não! Não são todos os usuários que podem ser bloqueados. Existe possibilidade de implementação de solução corporativa para que a renovação seja transparente ao usuário final.
c) Como o usuário saberá que não possui direito de uso ao certificado.?
Desde que seja um usuário proveniente do varejo. O usuário terá alterações visuais na interface do aplicativo, receberá notificações e email para comunicar a proximidade do vencimento do direito de uso.
Imagem 7: Fluxo de telas para a Renovação do direito de uso
5. Postman: Exemplos de chamadas aos Endpoints
Projeto Postman com as chamadas aos endpoints.
View file | ||
---|---|---|
|