La API de Deribit utiliza una autenticación de estilo OAuth 2.0 para todos privado solicitudes de API. Esto significa que debe obtener un token de acceso (y acompañante token de actualización) utilizando las credenciales de su clave de API antes de llamar a puntos finales privados. Métodos de API públicas (datos de mercado, etc.) no requieren autenticación, pero las conexiones autenticadas tienen un valor superior límites de velocidad y más funciones (feed de eventos sin procesar).
Esta guía explica cómo configurar las claves de API, autenticarse con la API de Deribit y administrar los tokens (incluso fork_token uso) y gestiona los ámbitos de acceso para diferentes niveles de permisos.
Antes de autenticarte, crea una clave de API en tu cuenta de Deribit. Puedes elegir entre Clave generada por Deribit (para ID de cliente/Secreto credenciales (autenticación) o un clave autogenerada (para la autenticación asimétrica de firmas).
Sugerencia
Para ver los pasos detallados sobre la generación de claves de API, consulta Deribit Creación de una nueva clave de API en Deribit y Claves API asimétricas artículos.
Ciertos métodos privados de la API de Deribit (por ejemplo, retiros o acciones de cuenta relacionadas con la seguridad) requieren Autenticación de dos factores (2FA). Si tu cuenta tiene habilitada la 2FA, debes proporcionar el segundo factor al llamar a estos métodos a través de la API
Nota
Las solicitudes de API sin la confirmación de 2FA requerida se rechazarán con el error security_key_authorization_error (código: 13668). Asegúrese siempre de que el flujo de su aplicación permita enviar el segundo factor cuando sea necesario.
-
Vea el La sección Claves de seguridad en los documentos de la API para obtener información técnica sobre la confirmación de las operaciones con claves de hardware o 2FA.
-
Para activar y administrar la autenticación de dos factores en su cuenta, siga los pasos que se indican en Artículo sobre autenticación de dos factores.
El punto final de autenticación principal de Deribit es público/de autenticación. Al llamar a esto, se devolverá un objeto JSON que contiene un access_token y un refresh_token, entre otros campos. tres tipos de subvenciones se puede usar al llamar público/autenticación:
-
Credenciales de cliente: Usa tu ID de cliente y Secreto del cliente directamente para obtener un token (adecuado para el uso de la API de servidor a servidor). Este es el método más simple: usted suministra
grant_type=client_credentials, junto con suclient_idyclient_secret. -
Firma del cliente: Utilice una firma criptográfica en lugar de enviar el secreto. Generas una firma HMAC-SHA256 a partir de una cadena que contiene una marca de tiempo, un nonce aleatorio y datos opcionales, utilizando tu secreto de cliente como clave. Este método claves API asimétricas) requiere
grant_type=client_signature, y debes proporcionarclient_id,timestamp(hora actual en ms),nonce,signature, y (si lo desea) undatacampo. Deribit verifica la firma en lugar de solicitar el secreto sin procesar. (Consulte los documentos oficiales para obtener la fórmula de firma exacta Guía de claves de API asimétricas para configurar las claves de este método.) -
Símbolo de actualización: Utilice un obtenido anteriormente
refresh_tokenpara obtener un nuevo token de acceso.grant_type=refresh_tokeny proporcione elrefresh_tokenvalor. Esto devuelve un nuevoaccess_token(y un nuevo token de actualización), lo que prolonga la sesión sin volver a necesitar el secreto del cliente.
Ejemplo: flujo de credenciales de cliente: A continuación se muestra un ejemplo de solicitud en el que se utilizan las credenciales del cliente y la estructura de respuesta:
GET /api/v2/public/auth?grant_type=client_credentials&client_id=<YOUR_CLIENT_ID>&client_secret=<YOUR_CLIENT_SECRET>
En caso de éxito, recibirás una respuesta de JSON como:
{
«jsonrpc»: «2.0",
«id»: 1,
«resultado»: {
«access_token»: «1582628593469.1mbq-j_4.cbp-oqow... uArm»,
«expirar»: 31536000,
«refresh_token»: «1582628593469.1gp4rqd0.a9wa78... A9jm»,
«scope»: «cuenta principal de conexión»,
«token_type»: «portador»
}
El access_token es una cadena larga (truncada arriba) que se utiliza para autenticar las solicitudes posteriores. El campo expires_in (en segundos) indica durante cuánto tiempo es válido el token, y el refresh_token se puede almacenar para renovar el acceso cuando sea necesario. El alcance muestra el alcance de acceso otorgado a este token (más información sobre los ámbitos más adelante) y token_type
Uso del token: Una vez que tengas un token de acceso, debes incluirlo en cualquier solicitud de API privada. La forma de incluirlo depende del tipo de conexión:
-
Solicitudes HTTP REST: Incluye el token en el encabezado de autorización HTTP:
Authorization: Bearer <access_token>.
-
Solicitudes de WebSocket (JSON-RPC): Incluye el token como parámetro en cada solicitud JSON: p. ej., «params»: {«access_token»: "<access_token>«,...} para los métodos privados. Si has autenticado una conexión de WebSocket con un sesión token (consulte Administración de conexiones: prácticas recomendadas), el servidor recordará tu token, lo que te permitirá omitirlo en las solicitudes posteriores sobre ese token lo mismo conexión WebSocket.
Sugerencia
Gestiona tus tokens de forma segura: almacena los tokens de actualización si necesitas un acceso duradero y trata los tokens de acceso como contraseñas (nunca los expongas públicamente).
Autenticación de firmas de
Para realizar un firma de cliente autenticación:
1. Prepare los componentes:
-
grant_type— Debe serclient_signature -
client_idyclient_secret— Se puede encontrar en el Página de API en el sitio web de Deribit después de crear la clave de API -
timestamp— Hora en la que se generó la solicitud, expresada como milisegundos. Es válido para 60 segundos desde la generación; después de eso, cualquier solicitud con una marca de tiempo anterior será rechazada -
signature— El valor de la firma se calcula como se describe a continuación -
nonce— Vector de inicialización de un solo uso generado por el usuario para el token del servidor -
data— Campo opcional, que contiene cualquier valor específico del usuario
2. Construye la cadena para firmar:
flujo de firmas de clientes de Deribit firma una secuencia de bytes muy específica. Utilice HMAC‑SHA256 con tu Secreto de cliente como clave y codifican hexágonamente el resumen.
Fórmula:
StringToSign = Timestamp + "\n" + Nonce + "\n" + Data Signature = HEX_STRING( HMAC-SHA256( ClientSecret, StringToSign ) )
Detalles importantes
-
Incluya siempre el dos caracteres de nueva línea mostrado arriba.
Si se omiten los datos, trátelos como una cadena vacía, de modo que la cadena siga terminando con\ndespués de Nonce.
-
Usa UTF-8 para todas las cadenas.
-
Envía el hexadecimal en minúscula del HMAC como firma.
-
La marca de tiempo es milisegundos desde la época. Nonce debe ser único por solicitud.
Shell (OpenSSL) de una línea
Forma general, funciona en Linux y macOS:
ClientId="YOUR_CLIENT_ID" ClientSecret="YOUR_CLIENT_SECRET" Timestamp="$(date +%s000)" # ms since epoch; on macOS this is fine Nonce="$(LC_ALL=C tr -dc 'a-z0-9' </dev/urandom | head -c8)" Data="" # or some context string Signature="$( printf "%s\n%s\n%s" "$Timestamp" "$Nonce" "$Data" \ | openssl dgst -sha256 -hmac "$ClientSecret" -r \ | cut -d' ' -f1 )" echo "$Signature"
Ejemplo
ClientId=AMANDA ClientSecret=AMANDASECRECT Timestamp=1576074319000 Nonce=1iqt2wls Data="" Signature="$( printf "%s\n%s\n%s" "$Timestamp" "$Nonce" "$Data" \ | openssl dgst -sha256 -hmac "$ClientSecret" -r \ | cut -d' ' -f1 )" echo "$Signature" # -> 56590594f97921b09b18f166befe0d1319b198bbcdad7ca73382de2f88fe9aa1
3. Enviar la solicitud:
Llame al público/auth con grant_type=client_signature e incluyen:
-
client_id -
timestamp -
nonce -
signature(el HMAC que calculó) -
data(si se utiliza en la firma)
Ejemplo de solicitud JSON-RPC con valores calculados anteriormente:
{
"jsonrpc": "2.0",
"id": 9929,
"method": "public/auth",
"params": {
"grant_type": "client_signature",
"client_id": "AMANDA",
"timestamp": 1576074319000,
"nonce": "1iqt2wls",
"data": "",
"signature": "56590594f97921b09b18f166befe0d1319b198bbcdad7ca73382de2f88fe9aa1"
}
}
En caso de éxito, el servidor devuelve un access_token y refresh_token, igual que con la autenticación de credenciales de cliente.
También puede usar el siguiente código de Python para generar automáticamente la firma y completar el proceso de autenticación en el entorno de prueba
import datetime
import random
import string
import hashlib
import hmac
import requests
from datetime import datetime
ClientId = ""
clientSecret = ""
Timestamp = round(datetime.now().timestamp() * 1000)
Nonce = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(8))
data = ""
def calcSignature(method, uri, secret, timestamp, nonce, body):
requestData = f'{method}\n{uri}\n{body}\n'
message = f'{timestamp}\n{nonce}\n{requestData}'
return hmac.new(
bytes(secret, "ascii"), # Changed to 'utf-8'
msg=bytes(message, "utf-8"), # Changed to 'utf-8'
digestmod=hashlib.sha256
).hexdigest().lower()
Signature = calcSignature("GET", "/api/v2/private/get_account_summary?currency=BTC&extended=true", clientSecret, Timestamp, Nonce, data)
headers = {
'Authorization': f'deri-hmac-sha256 id={ClientId},ts={Timestamp},nonce={Nonce},sig={Signature}',
'Content-Type': 'application/json' # Added Content-Type header
}
response = requests.get(
"https://test.deribit.com/api/v2/private/get_account_summary?currency=BTC&extended=true",
headers=headers
)
print(response.json())
print(ClientId, Timestamp, Nonce, Signature)
Cuando te autenticas con público/de autenticación (con las credenciales del cliente o la firma del cliente), la respuesta contiene tanto un access_token y un refresh_token.
-
access_token– used to authorize your API calls (via Authorization: Bearer <token> in HTTP or as access_token in WebSocket requests). -
refresh_token— se usa para obtener un nuevo token de acceso una vez que el actual caduque.
¿Por qué usar un token de actualización?
Los tokens de acceso tienen una vida útil limitada (definida en el expires_in campo). En lugar de volver a proporcionar su ID de cliente y su secreto de cliente cada vez, puede llamar público/de autenticación otra vez con grant_type=refresh_token y tu token de actualización almacenado. Esto prolonga la sesión de forma segura sin exponer sus credenciales.
Ejemplo:
{
"method": "public/auth",
"params": {
"grant_type": "refresh_token",
"refresh_token": "<1756301374726.1R2lPbsF.Q_Oqe7J-NpqHhhVV46NHvJuaidr5S1e3pdaO9pAvUoPmJFnSU9faJqxSiTp2Q4I_oT8XsiQo3mMu-0wFoqnY80Epz84XmRH-wQaCZ0jJEMFLUWZI-ILtUPMoPwvL9QFxhAX9sw8J-8559qNHjAJ_X3a_oGk8GTmIpEEF6Zenr00VWiPsMWxY17LmQf6xXd5q4kHk7cLsyoTSv76qrP-260xsshwomb6iJ7SMdTQYlG1D69mBBr1q_ECupVoOm0w9Wp0pxC0KSqyalhuNMLcKGFZveCA-pZQ2GH93WQptzVA-Mh0Gcw>"
}
}
La respuesta contiene una nueva access_token (y un nuevo refresh_token).
Comportamiento de sesión
-
Si el token se emitió con un ámbito de sesión, la actualización mantiene la misma sesión activa y no consume espacios de sesión adicionales.
-
Si no ha solicitado un
sessionámbito, cada actualización genera un nuevo token con el alcance de la conexión e invalida el anterior.
Mejores prácticas
-
Mantén siempre seguro tu token de actualización. Se puede usar para acuñar nuevos tokens de acceso.
-
Implemente la actualización automática poco antes de que caduque (consulte la
expires_invalor). -
Conserva el token de actualización más reciente si la aplicación se reinicia.
Token de horquilla
Los tokens de sesión se pueden «clonar» mediante el public/fork_token método. Se trata de una función avanzada que ayuda a gestionar varias sesiones. fork_token toma un token de actualización válido de un token de ámbito de sesión existente y genera un nuevo token de acceso para una nueva sesión (con el nombre que especifiques). En otras palabras, te permite convertir una sesión existente en otra sin volver a proporcionar el secreto de su cliente. Esto solo está permitido para los tokens de ámbito de sesión (no puedes bifurcar un token solo de conexión
¿Cuándo usar el token de bifurcación?
Supongamos que ya tiene una aplicación autenticada en un servidor y desea activar un segundo cliente (o un subservicio) mediante el misma cuenta y clave de API. En lugar de almacenar el secreto del cliente o volver a solicitar las credenciales, puedes tomar el token de actualización de la primera sesión y llamar public/fork_token para crear un nuevo token de sesión para el segundo cliente. El nuevo token tendrá los mismos alcances que el original (pero estará vinculado a un nombre de sesión diferente). Ambas sesiones pueden funcionar simultáneamente con la misma clave de API
Token de intercambio
public/exchange_token te permite convertir un token de actualización en un nuevo token de acceso para una subcuenta diferente. UN subject_id identifica la subcuenta de destino, por lo que este método es la forma estándar de cambiar entre subcuentas sin volver a enviar tu secreto de cliente. El token resultante conserva los mismos permisos a menos que indiques una anulación del alcance
¿Cuándo usar el token de intercambio?
Estás autenticado en una subcuenta y debes actuar en otra subcuenta con la misma clave de API. Llama public/exchange_token con:
-
refresh_tokende tu sesión actual -
subject_idde la subcuenta de destino -
opcional
scopepara anular los ámbitos y establecer unsession:namesi quieres que se cree un token de sesión durante el intercambio. Los límites del nuevo token no pueden superar los permisos de la persona que llama
Para mayor comodidad, Deribit también admite dos métodos alternativos para las solicitudes HTTP: Autenticación básica y Autenticación HMAC.
With Basic Auth, you can send: Authorization: Basic <base64(client_id:client_secret)> in your HTTP request, and Deribit will authenticate and execute the request in one step.
Con Autenticación HMAC (Credenciales de firma de Deribit), firmas la solicitud con tu secreto (como en el método client_signature) y lo incluyes en un Authorization: deri-hmac-sha256 ... encabezado.
Estos métodos eliminan la necesidad de solicitar un token previamente, pero normalmente se usan en escenarios avanzados o si prefieres no gestionar la actualización de los tokens por separado. La mayoría de los desarrolladores consideran que es el método más sencillo de usar público/de autenticación para obtener un token de portador y usarlo en llamadas posteriores.
Por último, puedes cerrar sesión e invalidar los tokens usando privado/cerrar sesión (solo WebSocket) si es necesario, pero por lo general los tokens caducan automáticamente después de su expires_in duración.
Aviso
Cerrar sesión con privado/cerrar sesión no se activa Cancelar al desconectar. Todos los pedidos o cotizaciones pendientes permanecerán activos a menos que se cancelen explícitamente.