Autenticazione e chiavi API
Selezionare la chiave pubblica, la chiave privata e il token Bearer del cliente appropriati per le richieste lato client, tra server e server, e per le richieste di utenti autenticati.
In questa pagina
- Decidere quale credenziale utilizzare
- Scegli la corretta credenziali
- Chiave API pubblica: integrazione lato client
- Chiave API privata: autorizzazione server-a-server
- Token di accesso del cliente: contesto di un utente autenticato
- Ambienti
- Conservare e ruotare i tasti
- Fallimenti di autenticazione
- Limiti di tasso
- Continua
Le credenziali di DEUNA rispondono a due domande diverse: Quale applicazione del commerciante sta effettuando la chiamata?, e, quando applicabile, Quale cliente autenticato lo sta utilizzando. Iniziare identificando il punto di partenza della richiesta e l'autorità necessaria, per poi confermare i requisiti esatti. catalogo degli endpoint.
Decidere quale credenziale utilizzare#
Porre le seguenti domande in ordine:
- La richiesta viene eseguita in un browser o in un'applicazione mobile? Utilizzare la chiave API pubblica o il contesto dell'applicazione documentato per l'SDK o l'endpoint. Non inserire la chiave privata in tale client.
- Il vostro backend esegue operazioni di commerciante? Utilizzare la chiave API privata in
X-Api-Keyper chiamate tra server, come la creazione, il recupero, il pagamento, il rimborso o l'annullamento di un ordine. - È necessario che DEUNA riconosca il cliente autenticato? Aggiungere il token di accesso a breve durata del cliente come
Authorization: Bearer …solo quando l'endpoint lo supporta. Questo fornisce alla richiesta il contesto specifico del cliente per risorse come i dati del profilo, gli indirizzi, gli strumenti di pagamento salvati o i flussi di pagamento autorizzati dal cliente.
| Scenario di richiesta | Credenziali | Perché |
|---|---|---|
| SDK o widget DEUNA in esecuzione in un browser o in un'app mobile | Chiave API pubblica | Identifica l'applicazione del commerciante e l'ambiente, senza esporre l'autorità del backend del commerciante. |
| Backend del commerciante che chiama un endpoint del commerciante | Chiave API privata | Autorizza l'operazione server-to-server di fiducia del commerciante. |
| Cliente autenticato che chiama un endpoint del cliente | Contesto di applicazione pubblico più token Bearer del cliente, come documentato dall'endpoint | Identifica sia l'applicazione che il cliente per il quale l'operazione può accedere alle risorse. |
| Operazione del backend del commerciante che richiede anche il contesto del cliente | Chiave API privata più token Bearer del cliente, solo quando l'endpoint lo supporta esplicitamente | Mantiene separate l'autorizzazione del commerciante e l'identità del cliente. |
| Flusso di cliente ospite | Contesto di applicazione pubblico; nessun token Bearer a meno che l'endpoint non lo richieda | Non è presente un'identità cliente DEUNA autenticata da collegare. |
Scegli la corretta credenziali#
| Credenziali | Dove appartiene | Cosa fa |
|---|---|---|
| Chiave API pubblica | Browser, SDK mobile o altra applicazione cliente documentata | Inizializza widget, UI e flussi di tokenizzazione supportati, e identifica l'applicazione del commerciante e l'ambiente. Non autorizza operazioni private del commerciante. |
| Chiave API privata | Solo backend del commerciante fidato | Autorizza operazioni server-server mercantili attraverso X-Api-Key. |
| Accesso al cliente | Flusso di cliente autenticato | Aggiunge l'identità del cliente tramite Authorization: Bearer … su endpoint che lo supportano. Non sostituisce una chiave API richiesta dall'endpoint. |
| Sessione di amministratore | DEUNA Admin | Fornisce un accesso basato sul ruolo dell'operatore autorizzato; non è una credenziali API di integrazione. |
Chiave API pubblica: integrazione lato client#
Utilizzare la chiave API pubblica quando il codice di DEUNA viene eseguito in un ambiente non attendibile, come un browser o un'applicazione mobile. Utilizzi tipici includono l'inizializzazione di un widget o SDK di DEUNA e l'identificazione del commerciante e dell'ambiente per la tokenizzazione e le esperienze di pagamento lato client supportate.
La chiave pubblica è intenzionalmente sicura da includere nella configurazione del client, ma non è una chiave segreta e non concede l'autorizzazione per eseguire transazioni, rimborsi, annullamenti o altre operazioni lato server del commerciante. Mantenere la chiave pubblica associata all'ambiente sandbox o di produzione corretto.
Chiave API privata: autorizzazione server-a-server#
Utilizzare la chiave API privata quando il vostro backend attendibile chiama un endpoint del commerciante. Le operazioni del commerciante che utilizzano l'autorizzazione tramite chiave API richiedono la chiave privata in X-Api-Key, mai Authorization: Bearer ….
curl --request GET \
--url https://api.sandbox.deuna.io/merchants/orders/ORDER_TOKEN \
--header "X-Api-Key: YOUR_PRIVATE_API_KEY"const response = await fetch("https://api.sandbox.deuna.io/merchants/orders/ORDER_TOKEN", {
method: "GET",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/orders/ORDER_TOKEN",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/orders/ORDER_TOKEN",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/orders/ORDER_TOKEN"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/orders/ORDER_TOKEN", nil)
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Token di accesso del cliente: contesto di un utente autenticato#
Utilizzare un token di accesso del cliente quando l'operazione deve agire nel contesto di un cliente attivo di DEUNA e l'endpoint supporta l'autenticazione tramite token. Inviatelo nell' Authorization header:
Authorization: Bearer USER_ACCESS_TOKENIl token Bearer è la risposta. quale cliente È in funzione. La chiave API fornisce le risposte. quale applicazione o backend del commerciante sta richiedendo l'accesso. A seconda dell'endpoint, una richiesta del cliente può quindi richiedere sia una chiave API per l'applicazione che il token Bearer del cliente.
Non inviare un token Bearer per un flusso di accesso ospite semplicemente perché l'header è disponibile. Non utilizzare una chiave privata del commerciante come token Bearer, né trattare un token del cliente come autorizzazione per operazioni riservate al commerciante. Se il tuo backend inoltra il contesto del cliente, fallo solo a un endpoint che supporti esplicitamente la combinazione.
Ambienti#
Sandbox e produzione sono isolati. Ogni ambiente ha il proprio URL di base, chiavi API, configurazione del commerciante, connessioni, dati e stato del pagamento.
Testare l'integrazione completa con le credenziali di sandbox e la configurazione di test del fornitore.
Elaborare pagamenti in tempo reale utilizzando le credenziali di produzione e di produzione.
Conservare e ruotare i tasti#
- Conservare le chiavi private in un gestore segreto o in una configurazione runtime protetta.
- Portare l'accesso al servizio e all'ambiente che hanno bisogno della chiave.
- Ridurre le credenziali dai registri delle richieste e dagli allegati di supporto.
- Distribuire una chiave di ricambio prima di rivocare la vecchia chiave, quindi il traffico di produzione continua in modo sicuro.
- Coordinate l'emissione e la rotazione delle chiavi con il vostro operatore di amministrazione autorizzato o DEUNA TAM.
Fallimenti di autenticazione#
Un'autorizzazione di ritorno normalmente 401 Unauthorized o 403 Forbidden. Prima di riprovare, verificare:
- La credenziale è presente nell'intestazione documentata.
- La chiave appartiene all'ambiente richiesto e commerciante.
- Il endpoint supporta il metodo di autorizzazione che hai inviato.
- Il token chiave o cliente non è scaduto o è stato revocato.
- Qualsiasi contesto commerciale, commerciale o cliente richiesto è presente.
Non riprovare un errore di autorizzazione indefinitamente. Conservare la risposta request_id quando disponibile e includerlo quando contatta il supporto.
Limiti di tasso#
DEUNA non applica un singolo limite di richieste al secondo a tutte le integrazioni. L'API Gateway valuta i limiti configurati come un numero massimo di richieste all'interno di una finestra temporale. Il limite effettivo può variare in base al commerciante, all'ambiente, al metodo HTTP e all'endpoint.
| Comportamento del Gateway | Cosa significa per la tua integrazione |
|---|---|
| Ambito | Un limite può essere applicato a un endpoint, condiviso tra endpoint che utilizzano lo stesso servizio backend, o applicato a livello di gateway. |
| Bucket di traffico | Le richieste possono essere raggruppate per ID commerciante, chiave API, token Bearer del cliente, indirizzo IP di origine o un altro header di richiesta configurato. Se l'identità prevista è assente, alcune regole ricorrono all'indirizzo IP di origine. |
| Finestra | Ogni regola definisce sia il numero massimo di richieste consentite che la durata della finestra di conteggio. Non presumere che tutti gli endpoint utilizzino la stessa finestra. |
| Copertura del percorso | Un limite specifico per percorso viene applicato solo quando una regola è configurata per quel metodo e endpoint. Le misure di sicurezza a livello di piattaforma possono comunque bloccare il traffico in caso di sovraccarico. |
Quando una richiesta supera un limite applicabile, il gateway restituisce 429 Too Many Requests con Retry-After header. La risposta a livello di percorso ha la seguente forma:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 1
{
"error": "rate_limit_exceeded",
"message": "maximum requests",
"code": 429,
"endpoint": "/merchants/orders",
"total_requests": 101,
"retry_after": "1s"
}I campi di risposta possono differire quando una misura di sicurezza a livello di gateway rifiuta la richiesta. Considerare lo stato HTTP e Retry-After header come autorevoli.
Maniglia 429 Gestire le risposte in modo sicuro
- Sospendere l'invio di richieste per almeno il numero di secondi specificato in
Retry-After. - Riprovare con backoff esponenziale e jitter invece di rilasciare immediatamente il traffico in attesa come un nuovo picco.
- Per la stessa operazione di pagamento, utilizzare la chiave idempotenza originale e lo stesso corpo della richiesta.
- Coordinare il throttling tra worker e istanze dell'applicazione; i loop di retry a livello di processo possono superare collettivamente un limite condiviso per merchant o endpoint.
- Se
429Le risposte continuano dopo la riduzione del traffico, conservando il corpo della risposta e l'ID della richiesta, quindi contattare il supporto DEUNA o il Technical Account Manager (TAM).
Richiedere un aumento del limite
Chiedere al supporto DEUNA o al TAM di rivedere il limite prima di un aumento pianificato del traffico. Includere:
- L'ambiente e l'ID del merchant.
- I metodi HTTP e gli endpoint interessati.
- I tassi di richiesta sostenuti e di picco previsti, la durata del picco e la data di implementazione pianificata.
- Gli indirizzi IP pubblici o i CIDR di uscita utilizzati dai sistemi del merchant che chiamano DEUNA.
Non includere API key, token Bearer o altre informazioni riservate nelle richieste di supporto.