Ich verwende einen JSON-API-Schlüssel, der in der Coinbase Developer Platform (CDP) erstellt wurde, und ich habe bestätigt, dass:
- Der Schlüssel über die richtigen Berechtigungen verfügt
- Das Kind im JWT-Header stimmt mit überein API-Schlüssel-ID
- Der sub-Anspruch entspricht dem Schlüsselnamen (organizations/.../apiKeys/...)
- Das Token ist mit ES256 signiert
- Der aud ist auf https://api.coinbase.com gesetzt
- Die nbf- und exp-Ansprüche befinden sich im richtigen Fenster
- Das HTTP Die Anfrage enthält das JWT im Authorization: Bearer -Header
Code: Select all
401 Unauthorized
{"error":"invalid_token"}
Code: Select all
import jwt
import json
import time
from pathlib import Path
from cryptography.hazmat.primitives import serialization
# Load JSON API key (Coinbase CDP key)
with open("cdp_api_key.json", "r") as f:
key_data = json.load(f)
# Load EC private key
with open("private_key.pem", "r") as f:
private_key = serialization.load_pem_private_key(
f.read().encode(),
password=None,
)
now = int(time.time())
# JWT payload
payload = {
"sub": key_data["name"],
"iss": key_data["name"],
"nbf": now,
"exp": now + 120,
"aud": "https://api.coinbase.com",
}
# Generate ES256-signed JWT
token = jwt.encode(
payload,
private_key,
algorithm="ES256",
headers={"kid": key_data["id"]},
)
print(token)
Frage:
Gibt es eine zusätzliche Anforderung für den ES256-JWT-Flow (CDP-JSON-Schlüssel) von Coinbase, die nicht dokumentiert ist, oder etwas Kleines, das mir fehlt?
Mobile version