Construção do próprio Webhook

O Webhook é um serviço que funciona como um listener do agente CPQD iD, recebendo notificações através de determinadas rotas/tópicos que estão detalhadas logo abaixo.

Esse Webhook é associado a uma carteira através de uma configuração no agente CPQD iD.

Vale mencionar que cada tópico, nesse documento issue_credential, present_proof e connections, possui uma máquina de estados, e a cada mudança de status, é disparada uma notificação pra esse tópico.

Além disso, os payloads de cada tópico podem variar dos exemplos abaixo, de acordo com o status corrente.

1. Requisições

1.1 POST /topic/issue_credential

A requisição de emissão de credenciais enviará um payload no endpoint /topic/issue_credential com um conteúdo parecido com o exemplo abaixo.

Os status que podem ser alcançados nesse caso são proposal_sent, proposal_received, offer_sent, offer_received, request_sent, request_received, issued, credential_received, credential_issued, credential_acked.

{
    "auto_issue": false,
    "auto_offer": false,
    "connection_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "credential": {},
    "credential_definition_id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag",
    "credential_exchange_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "credential_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "credential_offer": {"..."},
    "credential_proposal_dict": {"..."},
    "credential_request": {},
    "credential_request_metadata": {},
    "error_msg": "Credential definition identifier is not set in proposal",
    "initiator": "self",
    "parent_thread_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "raw_credential": {},
    "schema_id": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0",
    "state": "credential_acked",
    "thread_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
}

É possível realizar validações ou apenas monitorar o fluxo, em caso de sucesso devolver 200, caso contrário devolver erro http, interrompendo o fluxo da credencial.

1.2 POST /topic/present_proof

A requisição de apresentação de prova enviará um payload no endpoint /topic/present_proof com um conteúdo parecido com o exemplo abaixo.

Os status que podem ser alcançados no tópico present_proof são proposal_sent, proposal_received, request_sent, request_received, presentation_sent, presentation_received, presentation_acked, verified.

{
    "connection_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "created_at": "2021-12-31 23:59:59Z",
    "initiator": "self",
    "presentation_exchange_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "presentation_proposal": {"..."},
    "presentation_proposal_dict": {"..."},
    "role": "prover",
    "state": "verified",
    "thread_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "trace": true,
    "updated_at": "2021-12-31 23:59:59Z",
}

Em caso de sucesso devolver 200, caso contrário devolver erro http, interrompendo o fluxo de prova.

1.3 POST /topic/connections

A requisição para gerenciamento de conexões enviará um payload no endpoint /topic/connections com um conteúdo parecido com o exemplo abaixo:

Os status que podem ser alcançados no tópico connections são invitation, request, response, active, completed

{
    "connection_protocol": "connections/1.0",
    "routing_state": "active",
    "their_did": "WgWxqztrNooG92RXvxSTWv",
    "accept": "auto",
    "state": "active",
    "their_role": "requester",
    "invitation_key": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV",
    "invitation_mode": "once",
    "created_at": "2021-12-31 23:59:59Z",
    "their_label": "Bob",
    "rfc23_state": "invitation-sent",
    "connection_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "updated_at": "2021-12-31 23:59:59Z"
    "my_did": "WgWxqztrNooG92RXvxSTWv"
}

Em caso de sucesso devolver 200, caso contrário devolver erro http, interrompendo o fluxo.

2. Configuração

Para configurar um ou mais webhooks no Portal CPQD iD faz-se necessário:

  1. Acessar o menu “Minha Carteira” no Portal;

  2. Pressionar o botão “CONFIGURAR WEBHOOKS”;

  3. Pressionar o botão “+ ADICIONAR WEBHOOK”;

  4. Inserir um endereço válido (URL) e uma chave de autorização.

O endereço (URL) é necessário para que o recebimento de eventos relacionados à emissão e provas de credenciais aconteça e a chave de autorização para que ocorra a integração do CPQD iD com a aplicação do cliente.

Após a configuração, é possível realizar a edição ou a remoção do(s) webhook(s) cadastrado(s).

text

Menu “Minha Carteira” - Passos 1 e 2

text

Cadastro do(s) webhook(s) - Passos 3 e 4

text

Menu “Minha Carteira” com um webhook cadastrado