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:
Acessar o menu “Minha Carteira” no Portal;
Pressionar o botão “CONFIGURAR WEBHOOKS”;
Pressionar o botão “+ ADICIONAR WEBHOOK”;
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).