Passa al contenuto principale

NoPos Connect

NoPos Connect è il nostro sistema OAuth unificato che ti permette di integrare facilmente tutti i servizi NoPos nella tua applicazione con un'unica autenticazione.

Caratteristiche principali

  • OAuth 2.0 standard - Implementazione completa dello standard OAuth
  • Autenticazione unificata - Un token per tutti i servizi NoPos
  • Permessi granulari - Controllo preciso su cosa può fare la tua app
  • Sicurezza enterprise - Token JWT con scadenza e validazione
  • Setup in 5 minuti - Integrazione rapida e semplice

Come funziona

1. Registra la tua app

Crea un'applicazione nella dashboard NoPos e ottieni le tue credenziali:

  • client_id - Identificatore univoco della tua app
  • client_secret - Chiave segreta per l'autenticazione
  • redirect_uri - URL di ritorno dopo l'autenticazione

2. Richiedi l'autorizzazione

Reindirizza l'utente alla pagina di connessione di NoPos:

const connectUrl = new URL('https://app.nopos.it/connect');
connectUrl.searchParams.set('client_id', 'YOUR_CLIENT_ID');
connectUrl.searchParams.set('redirect_uri', 'YOUR_REDIRECT_URI');
connectUrl.searchParams.set('scopes', 'payments:read payments:write fiscals:read');
connectUrl.searchParams.set('state', generateRandomState());

window.location.href = connectUrl.toString();

3. Ricevi il codice di autorizzazione

Dopo l'autorizzazione, l'utente viene reindirizzato alla tua app con un codice di autorizzazione:

https://your-app.com/callback?
code=AUTHORIZATION_CODE&
state=RANDOM_STATE_VALUE

4. Scambia il codice per il token

Scambia il codice di autorizzazione con il token usando il tuo client_secret:

curl -X POST https://api.nopos.it/v1/auth/token \
-H "Content-Type: application/json" \
-d '{
"code": "AUTHORIZATION_CODE",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"redirect_uri": "https://your-app.com/callback"
}'

5. Usa le API

Utilizza il token per accedere alle API NoPos:

curl -H "Authorization: Bearer ACCESS_TOKEN" \
https://api.nopos.it/v1/payments

Scopes disponibili

Pagamenti

  • payments:read - Leggere informazioni sui pagamenti
  • payments:write - Creare e gestire pagamenti

Fatturazione

  • fiscals:read - Leggere fatture e documenti fiscali
  • fiscals:write - Creare e inviare fatture

E-commerce

  • stores:read - Leggere ordini e prodotti
  • stores:write - Gestire ordini e inventario

Esempi di integrazione

// 1. Reindirizza l'utente per l'autorizzazione
const connectUrl = new URL('https://app.nopos.it/connect');
connectUrl.searchParams.set('client_id', 'YOUR_CLIENT_ID');
connectUrl.searchParams.set('redirect_uri', 'https://your-app.com/callback');
connectUrl.searchParams.set('scopes', 'payments:read payments:write');
connectUrl.searchParams.set('state', generateRandomState());

window.location.href = connectUrl.toString();

// 2. Gestisci il callback e scambia il code per il token
app.get('/callback', async (req, res) => {
const { code, state } = req.query;

// Valida lo state per sicurezza
if (state !== expectedState) {
return res.status(400).send('Invalid state');
}

// Scambia il code per il token
const tokenResponse = await fetch('https://api.nopos.it/v1/auth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
code: code,
client_id: process.env.NOPOS_CLIENT_ID,
client_secret: process.env.NOPOS_CLIENT_SECRET,
redirect_uri: 'https://your-app.com/callback'
})
});

const tokenData = await tokenResponse.json();

// Salva il token e procedi
saveToken(tokenData.accessToken);
res.redirect('/dashboard');
});

// 3. Usa il token per le API
async function getPayments(token) {
const response = await fetch('https://api.nopos.it/v1/payments', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});

return response.json();
}

Sicurezza

State Parameter

Sempre utilizzare il parametro state per prevenire attacchi CSRF:

const state = crypto.randomBytes(32).toString('hex');
// Salva lo state in sessione o database
// Verifica che corrisponda nel callback

Token Storage

  • Non memorizzare il token nel localStorage per applicazioni web
  • Usa sessionStorage o cookie sicuri
  • Implementa refresh automatico del token

HTTPS

  • Sempre utilizzare HTTPS in produzione
  • Configura i domini consentiti nella dashboard dell'app (es. example.com, app.example.com)
  • Valida che redirect_uri sia HTTPS per sicurezza

Gestione errori

Errori comuni

CodiceDescrizioneSoluzione
invalid_clientClient ID o secret non validiVerifica le credenziali
invalid_redirect_uriRedirect URI non autorizzatoConfigura i domini consentiti nella dashboard
invalid_scopeScope non supportatoUsa solo scope validi
access_deniedUtente ha negato l'autorizzazioneRichiedi nuovamente

Esempio gestione errori

app.get('/callback', (req, res) => {
const { error, error_description, access_token } = req.query;

if (error) {
console.error(`OAuth error: ${error} - ${error_description}`);
return res.redirect('/error?message=' + encodeURIComponent(error_description));
}

if (access_token) {
// Successo - procedi con il token
saveToken(access_token);
res.redirect('/dashboard');
}
});

Best Practices

  1. Usa sempre HTTPS in produzione
  2. Implementa il refresh token per sessioni lunghe
  3. Valida sempre lo state per sicurezza CSRF
  4. Gestisci gli errori in modo user-friendly
  5. Logga le attività per debugging e sicurezza
  6. Testa in sviluppo prima del deploy in produzione

Supporto

Hai bisogno di aiuto con NoPos Connect?


NoPos Connect - L'integrazione che funziona davvero