docs(sdk): add comprehensive integration examples in sdk/examples
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Exemplo 01: Login Seguro via Certificado Digital (Challenge-Response)
|
||||
*
|
||||
* Demonstra como autenticar um usuário sem senhas, assinando um desafio emitido
|
||||
* pelo servidor backend da sua aplicação web.
|
||||
*/
|
||||
|
||||
import { CyberCoreSigner, AgentNotRunningError } from '@cybercore/signer-sdk';
|
||||
|
||||
async function main() {
|
||||
const signer = new CyberCoreSigner({
|
||||
applicationName: 'Portal Corporativo ERP'
|
||||
});
|
||||
|
||||
// 1. Verifica se o agente desktop está ativo na máquina
|
||||
const isRunning = await signer.isInstalled();
|
||||
if (!isRunning) {
|
||||
console.error('O CyberCore Signer não está em execução. Baixe e abra o aplicativo para continuar.');
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Conecta e obtém autorização
|
||||
console.log('Conectando ao agente...');
|
||||
await signer.connect();
|
||||
|
||||
// 3. Lista os certificados digitais disponíveis
|
||||
const certs = await signer.getCertificates();
|
||||
console.log(`Foram localizados ${certs.length} certificado(s) no computador:`);
|
||||
certs.forEach((c, idx) => {
|
||||
console.log(`[${idx + 1}] ${c.alias} (${c.certificate_type}) - ${c.subject_name}`);
|
||||
});
|
||||
|
||||
if (certs.length === 0) {
|
||||
console.warn('Nenhum certificado digital A1 ou token A3 encontrado.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Seleciona o primeiro certificado disponível
|
||||
const selectedCert = certs[0];
|
||||
|
||||
// 4. Obtém o desafio emitido pelo seu backend (simulado aqui)
|
||||
const serverChallenge = `auth-session-${Date.now()}-${Math.random().toString(36).substring(2)}`;
|
||||
console.log(`Desafio recebido do servidor: ${serverChallenge}`);
|
||||
|
||||
// 5. Executa a autenticação criptográfica
|
||||
console.log('Solicitando confirmação de login no CyberCore Signer...');
|
||||
const authResult = await signer.authenticate({
|
||||
certificateId: selectedCert.id,
|
||||
challenge: serverChallenge
|
||||
});
|
||||
|
||||
console.log('Login realizado com sucesso!');
|
||||
console.log('Titular:', authResult.subjectName);
|
||||
console.log('CPF/CNPJ:', authResult.subjectCpfCnpj);
|
||||
console.log('Algoritmo:', authResult.algorithm);
|
||||
console.log('Assinatura do Desafio (Base64):', authResult.signature.substring(0, 32) + '...');
|
||||
|
||||
// O payload retornado deve ser enviado ao seu backend para verificação final:
|
||||
// POST /api/auth/verify-signature { challenge, signature, certificate }
|
||||
}
|
||||
|
||||
main().catch(err => {
|
||||
if (err instanceof AgentNotRunningError) {
|
||||
console.error('Agente offline!\n' + err.actionableGuidance);
|
||||
} else {
|
||||
console.error(`Erro no login (${err.code}):`, err.message);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user