AuthID Wallet SDK
SDK completo para integração com a plataforma AuthID de identidade digital. Autenticação segura, carteiras digitais e credenciais verificáveis.
OAuth 2.0 + PKCE
Autenticação segura com suporte a múltiplos fluxos OAuth
Carteira Digital
Gerenciamento completo de credenciais verificáveis
TypeScript
Tipos completos para melhor experiência de desenvolvimento
Multi-plataforma
Suporte a React Native, Web e Node.js
npm install @authid/wallet-sdk
Início Rápido
Comece a usar o AuthID Wallet SDK em poucos minutos. Este guia mostra como configurar a autenticação e acessar a API de carteira digital.
Instale o SDK
npm install @authid/wallet-sdk
Configure o AuthClient
import { AuthClient } from '@authid/wallet-sdk';
const auth = new AuthClient({
serverUrl: 'https://auth.valid.ia.br',
realm: 'authid',
clientId: 'sua-aplicacao',
});
// Login com OAuth Authorization Code + PKCE
const pkce = await auth.generatePKCE();
const authUrl = auth.getAuthorizationUrl(
'myapp://callback',
pkce,
'random-state'
);
// Após redirect, trocar o code pelo token
const tokenInfo = await auth.exchangeCode({
code: 'authorization_code',
redirectUri: 'myapp://callback',
codeVerifier: pkce.codeVerifier,
});
Use o WalletSDK
import { WalletSDK } from '@authid/wallet-sdk';
const wallet = new WalletSDK({
baseUrl: 'https://wallet.valid.ia.br',
apiKey: tokenInfo.accessToken,
organizationId: 'sua-organizacao',
});
// Listar credenciais
const credentials = await wallet.credentials.list();
// Obter detalhes de uma credencial
const credential = await wallet.credentials.get('credential-id');
// Criar uma apresentação verificável
const presentation = await wallet.presentations.create({
credentialIds: ['credential-id'],
verifierDid: 'did:web:verifier.example.com',
});
Instalação
Requisitos
- Node.js 18+ ou ambiente compatível
- React Native 0.70+ (para apps móveis)
- TypeScript 5.0+ (recomendado)
NPM / PNPM / Yarn
npm install @authid/wallet-sdk
pnpm add @authid/wallet-sdk
yarn add @authid/wallet-sdk
Para React Native
O SDK funciona nativamente com React Native. Para recursos de criptografia, instale também:
npx expo install expo-crypto expo-secure-store
crypto.subtle está disponível.
Configuração
AuthClient
O AuthClient gerencia a autenticação com o servidor Keycloak/OAuth.
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
serverUrl |
string |
Sim | URL do servidor Keycloak |
realm |
string |
Sim | Nome do realm |
clientId |
string |
Sim | ID do client OAuth |
clientSecret |
string |
Não | Secret para clients confidenciais |
scopes |
string[] |
Não | Scopes OAuth (default: openid, profile, email) |
WalletSDK
O WalletSDK fornece acesso à API de carteira digital.
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
baseUrl |
string |
Sim | URL base da API |
apiKey |
string |
Sim | Token de acesso OAuth |
organizationId |
string |
Não | ID da organização |
timeout |
number |
Não | Timeout em ms (default: 30000) |
OAuth 2.0 com PKCE
O fluxo recomendado para aplicações mobile e SPA é o Authorization Code com PKCE. Este fluxo oferece máxima segurança sem necessidade de client secret.
Exemplo Completo
import { AuthClient } from '@authid/wallet-sdk';
const auth = new AuthClient({
serverUrl: 'https://auth.valid.ia.br',
realm: 'authid',
clientId: 'minha-app',
});
// 1. Gerar PKCE challenge
const pkce = await auth.generatePKCE();
// 2. Construir URL de autorização
const state = crypto.randomUUID();
const authUrl = auth.getAuthorizationUrl(
'myapp://auth/callback', // redirect URI
pkce, // PKCE challenge
state // state para CSRF
);
// 3. Abrir browser (React Native com expo-auth-session)
import * as WebBrowser from 'expo-web-browser';
const result = await WebBrowser.openAuthSessionAsync(authUrl, 'myapp://');
// 4. Extrair code da URL de callback
const url = new URL(result.url);
const code = url.searchParams.get('code');
const returnedState = url.searchParams.get('state');
// 5. Validar state
if (returnedState !== state) {
throw new Error('State mismatch - possible CSRF attack');
}
// 6. Trocar code por tokens
const tokenInfo = await auth.exchangeCode({
code,
redirectUri: 'myapp://auth/callback',
codeVerifier: pkce.codeVerifier,
});
console.log('Access Token:', tokenInfo.accessToken);
console.log('Expires at:', tokenInfo.expiresAt);
Credenciais
O módulo de credenciais permite gerenciar credenciais verificáveis na carteira do usuário.
Listar Credenciais
const credentials = await wallet.credentials.list();
credentials.forEach(cred => {
console.log(`${cred.type}: ${cred.issuer.name}`);
console.log(`Status: ${cred.status}`);
console.log(`Válido até: ${cred.expiresAt}`);
});
Obter Detalhes
const credential = await wallet.credentials.get('credential-id');
console.log('Tipo:', credential.type);
console.log('Issuer:', credential.issuer);
console.log('Claims:', credential.claims);
console.log('Prova:', credential.proof);
Tipos de Credenciais Suportados
API Reference
CLASS AuthClient
Cliente de autenticação OAuth 2.0 / OpenID Connect.
Métodos
login(credentials: LoginCredentials): Promise<TokenInfo>
Login direto com username/password (Direct Grant)
exchangeCode(params: AuthCodeParams): Promise<TokenInfo>
Troca authorization code por tokens
refresh(): Promise<TokenInfo>
Renova o access token usando refresh token
logout(): Promise<void>
Invalida tokens e encerra sessão
generatePKCE(): Promise<PKCEChallenge>
Gera code_verifier e code_challenge para PKCE
getAuthorizationUrl(redirectUri, pkce?, state?): string
Constrói URL de autorização OAuth
getUserInfo(): Promise<UserInfo>
Obtém informações do usuário do endpoint userinfo
isAuthenticated(): boolean
Verifica se há sessão ativa válida
CLASS WalletSDK
SDK para gerenciamento de carteira digital e credenciais verificáveis.
Propriedades
credentials: CredentialsModule
Módulo para gerenciamento de credenciais
presentations: PresentationsModule
Módulo para criação de apresentações verificáveis
wallet: WalletModule
Módulo para operações da carteira
Tipos TypeScript
// Configuração do Keycloak
interface KeycloakConfig {
serverUrl: string;
realm: string;
clientId: string;
clientSecret?: string;
scopes?: string[];
}
// Informações do Token
interface TokenInfo {
accessToken: string;
refreshToken?: string;
expiresAt: Date;
refreshExpiresAt?: Date;
tokenType: string;
idToken?: string;
scope?: string;
}
// Informações do Usuário
interface UserInfo {
sub: string;
email?: string;
email_verified?: boolean;
name?: string;
given_name?: string;
family_name?: string;
preferred_username?: string;
}
// Credencial Verificável
interface Credential {
id: string;
type: string[];
issuer: CredentialIssuer;
issuanceDate: string;
expirationDate?: string;
credentialSubject: Record<string, unknown>;
proof?: CredentialProof;
status: 'active' | 'revoked' | 'expired';
}
// Apresentação Verificável
interface VerifiablePresentation {
id: string;
type: string[];
verifiableCredential: Credential[];
holder: string;
proof: PresentationProof;
}
Tratamento de Erros
O SDK lança erros tipados para facilitar o tratamento:
import { AuthError, WalletError } from '@authid/wallet-sdk';
try {
await auth.login({ username, password });
} catch (error) {
if (error instanceof AuthError) {
switch (error.code) {
case 'INVALID_CREDENTIALS':
console.log('Usuário ou senha incorretos');
break;
case 'ACCOUNT_DISABLED':
console.log('Conta desativada');
break;
case 'NO_REFRESH_TOKEN':
console.log('Sessão expirada, faça login novamente');
break;
default:
console.log('Erro de autenticação:', error.message);
}
}
}
try {
await wallet.credentials.get('invalid-id');
} catch (error) {
if (error instanceof WalletError) {
console.log(`Erro ${error.code}: ${error.message}`);
console.log('Status HTTP:', error.statusCode);
}
}
Códigos de Erro Comuns
INVALID_CREDENTIALS
Usuário ou senha incorretos
NO_REFRESH_TOKEN
Sessão expirada, refresh token indisponível
NOT_AUTHENTICATED
Operação requer autenticação
CREDENTIAL_NOT_FOUND
Credencial não encontrada
CREDENTIAL_REVOKED
Credencial foi revogada
NETWORK_ERROR
Erro de conectividade