Produção: https://certificado.vidaas.com.br
Homologação: https://hml-certificado.vidaas.com.br
Demonstração: https://demo-certificado.vidaas.com.br
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.
Solicitação de cadastro:
Exemplo Request:
{ "name": "App Demo", "comments": "App Demo", "redirect_uris": [https://valid.com.br/], "email": ""}
Exemplo Response:
{ "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.
Não incluir no cadastro de “redirect_uris“ o “push://” pois é gerado automaticamente.
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:
Exemplo Request:
{ "client_id": "4c9fb552-0387-4e5f-8727-6676fa88dce1", "client_secret": "Ny2n3hq67gQEFvH7", "user_cpf_cnpj": "CPF", "val_cpf_cnpj": "12345678901"}
Exemplo Response:
2.1 - Status S
{ "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
{ "status": "N"}
Observação:
Status de retorno indicando “S” para resultado positivo ou “N” caso contrário;
Serviço para obter do titular autorização de uso da sua chave privada, com solicitação de fatores de autenticação.
AUTHORIZATION
Solicitação de Autorização:
Exemplo Request:
PATH_BASE/oauth/authorize?client_id=4c9fb552-0387-4e5f-8727-6676fa88dce1&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstwcM&code_challenge_method=S256&response_type=code&scope=signature_session&login_hint=12345678901&lifetime=900&redirect_uri=http://valid.com.br
Exemplo Request com PUSH:
PATH_BASE/oauth/authorize?client_id=4c9fb552-0387-4e5f-8727-6676fa88dce1&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstwcM&code_challenge_method=S256&response_type=code&scope=signature_session&login_hint=12345678901&lifetime=900&redirect_uri=push://
Exemplo Response:
<REDIRECT_URI>?code=2b15b0e1-bbf2-4e55-99b8-93cf824576b1&state=NONE
Exemplo Response com PUSH:code=d402d71c-0918-43ca-a07d-62597f559497
Observação:
Para o modo "PUSH NOTIFICATION" deverá realizar o Passo AUTHENTICATIONS antes do Passo 4 - Token.
Para autorização via QRCODE
Após solicitação de autorização, redireciona para o titular autorizar o uso
Página de Autorização para o titular da chave privada
O Valid PSC irá retornar com HTTP 302, solicitando redirecionamento para a página de autenticação OAuth para que o titular da chave privada
possa fazer autenticação via QRCODE. A página com o QRCODE ficará aguardando por 2 minutos o titular da chave privada autenticar com o
aplicativo ViDaas.
Autenticação pelo titular da chave privada
O titular da chave privada com uso do aplicativo ViDaas efetua a leitura do QRCODE autorizando a aplicação cliente na versão WEB o uso do
certificado digital.
Caso o titular possua mais de um certificado, será apresentado os certificados para que o titular faça a escolha do certificado que será
autorizado o uso.
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:

Solicitação de Autenticação:
Path : <URI-base>/valid/api/v1/trusted-services/authentications
Método HTTPS: GET
Parâmetros da requisição: formato "application/x-www-form-urlencoded"
code: obrigatório, deve conter código retornado do Serviço de Solicitação de Autorização (Authorization);
Exemplo de Solicitação de Autenticação
<URI-base>/valid/api/v1/trusted-services/authentications?code=d402d71c-0918-43ca-a07d-62597f559497
Exemplo de Resposta
{"authorizationToken":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..nYWhIcwNUH_22Upe1BSUTQ.oXT7UF2Mvtm5C6CjpdEGxcL_9XM86oNh4w0iGgUkQVGBla0CNnNW0_QbGx73Ldnu81kydOuztSj3wfWUQf3t7IftvVMuyfdigW4_lz1LcC2q3p9N32iSEGb5VPzzSKqiZGa3asfMgEPjr3xYo7Lo3biTtbVPrChPLHslMi--b7DXXOIZ23N2R5bCT2_h6pj6PyBnXsEWl5uaF9v5PSXsQ.ZuLdlRZkfGBoqrxbj5tgTg","redirectUrl": "push://<URI gerada no cadastro de aplicação>?code=8b1bde77-3647-4d76-1289-a2ec97c75a4d&state=NONE"}
Observação:
Para o método Authorize QRCODE (sem o push://) deve-se alterar o campo "code" pelo "code" retornado na URL.
Para o método Authorize PUSH deve-se alterar o campo "code" pelo "authorizationToken" retornado no Authentications.
Exemplo Request:
{ "grant_type": "authorization_code", "client_id": "4c9fb552-0387-4e5f-8727-6676fa88dce1", "client_secret": Ny2n3hq67gQEFvH7, "code": "<authorization code>", "code_verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"}
Exemplo Response:
{ "access_token": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..2tk9rh8yisesxBm1tNNcUg.z6VZu-HZJka9EDBSAgDrtZWgYn5je__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"}
Observação:
A aplicação suporta os seguintes signature_format:
RAW, CMS, CAdES_AD_RT, CAdES_AD_RB, PAdES_AD_RT, PAdES_AD_RB, RAW_DIGESTED_DATA.
e padding_method:
NONE, PKCS1V1_5, PSS.
Exemplo Request:
{ "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 Response:
{ "signatures": [ { "id": "dummy assinatura", "raw_signature": "my signature base64" } ], "certificate_alias": "CERTIFICADO TESTE"}