認証ガイド
APIキー、JWTトークン、OAuth 2.0を使用してSmart Money APIで認証する方法を学びましょう。業界標準の認証方法とベストプラクティスで統合を保護します。
概要
Smart Money APIは、さまざまなユースケースに対応する複数の認証方法をサポートしています。統合に最適な方法を選択してください:
APIキー(プライマリ): すべてのREST API呼び出しでキーを X-API-Key リクエストヘッダーに送信します。ボットやサーバー間使用に推奨される方法です。
セッションJWT(フォールバック): ブラウザ/ダッシュボードセッションは、 Authorization: Bearerを介して24時間有効なセッションJWTで認証します。プログラムクライアントは X-API-Key.
OAuth 2.0: マルチユーザーアプリケーションやサードパーティ統合向けのエンタープライズグレード認証。ユーザーがアプリにデータアクセスを許可します。
すべてのAPIリクエストはHTTPS経由で行う必要があります。暗号化されていないHTTPリクエストは拒否されます。また、APIキーをバージョン管理にコミットしたり、公開して共有したりしないでください。
APIキー
APIキーはアカウントに発行される一意の認証情報です。各キーは単一の権限セットとクォータを表します。異なるアプリケーションや環境(開発、ステージング、本番)用に複数のキーを生成できます。
APIキーの生成
アカウントコンソールからAPIキーを生成:
- に移動 Smart Money Console
- サイドバーから「APIキー」を選択
- 「新しいキーを生成」をクリック
- キータイプを選択(開発、ステージング、本番)
- レート制限と機能を設定
- キーをコピーして安全に保管
APIキーはすぐに保存してください!再度表示することはできません。紛失した場合は、新しいキーを生成する必要があります。
キーフォーマット
APIキーは標準フォーマットに従います:
sk_live_4e3e4d0f1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z
sk_test_8f4g5h6i7j8k9l0m1n2o3p4q5r6s7t8u9v0w1x2y3z4a5b6c7d8e9f
sk_dev_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b
キープレフィックスは環境を示します:
sk_live_ — 完全なクォータを持つ本番キー
sk_test_ — 開発データと削減されたクォータのテストキー
sk_dev_ — サンドボックスデータの個人開発キー
X-API-Keyヘッダー(プライマリ)
すべてのAPIリクエストでAPIキーを X-API-Key リクエストヘッダーに送信します。キーをURLに配置しないでください。
HTTPヘッダー
GET /v1/whales/events HTTP/1.1
Host: api.smartmoneyapi.com
X-API-Key: sm_your_key
Content-Type: application/json
cURL例
curl -X GET https://api.smartmoneyapi.com/v1/whales/events \
-H "X-API-Key: sm_your_key" \
-H "Content-Type: application/json"
Python例
import requests
api_key = "sm_your_key"
headers = {
"X-API-Key": api_key,
"Content-Type": "application/json"
}
response = requests.get(
"https://api.smartmoneyapi.com/v1/whales/events",
headers=headers
)
data = response.json()
JWTトークン認証
長期間のセッションやサーバー間通信では、APIキーをJWTトークンと交換します。JWTトークンは24時間有効で、アプリケーションコードにAPIキーを保存する必要性を減らします。
JWTトークンの取得
APIキーをJWTエンドポイントにPOSTしてトークンを取得:
curl -X POST https://api.smartmoneyapi.com/auth/jwt \
-H "Content-Type: application/json" \
-d '{
"api_key": "sk_live_4e3e4d0f1b2c3d4e5f6g7h8i9j0k1l2m"
}'
JWTレスポンス
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"expires_in": 86400,
"token_type": "Bearer"
}
JWTトークンの使用
APIキーと同様に、AuthorizationヘッダーでJWTトークンを使用:
import requests
import json
from datetime import datetime, timedelta
class JWTAuth:
def __init__(self, api_key):
self.api_key = api_key
self.token = None
self.token_expires = None
def get_valid_token(self):
# 現在のトークンがまだ有効か確認
if self.token and self.token_expires > datetime.now():
return self.token
# 新しいトークンを取得
response = requests.post(
"https://api.smartmoneyapi.com/auth/jwt",
json={"api_key": self.api_key}
)
data = response.json()
self.token = data["token"]
self.token_expires = datetime.now() + timedelta(seconds=data["expires_in"])
return self.token
def request(self, method, url, **kwargs):
token = self.get_valid_token()
headers = kwargs.get("headers", {})
headers["Authorization"] = f"Bearer {token}"
kwargs["headers"] = headers
return requests.request(method, url, **kwargs)
# 使用例
auth = JWTAuth("sk_live_4e3e4d0f1b2c3d4e5f6g7h8i9j0k1l2m")
response = auth.request(
"GET",
"https://api.smartmoneyapi.com/v1/whales/events"
)
print(response.json())
OAuth 2.0
OAuth 2.0は、複数のユーザーアカウントにアクセスする必要があるアプリケーション向けです。ユーザーはAPIキーを共有することなく、アプリケーションにデータアクセスを許可します。
OAuth 2.0フロー
Smart Money APIは、ウェブアプリケーション向けにAuthorization Codeフローをサポート:
- ユーザーが「Smart Moneyで接続」ボタンをクリック
- ブラウザが認証ページにリダイレクト
- ユーザーがアプリケーションに権限を付与
- ブラウザが認証コードと共にリダイレクト
- バックエンドがコードをアクセストークンと交換
- ユーザーに代わってデータにアクセス可能
ステップ1:認証リクエスト
ユーザーを認証エンドポイントにリダイレクト:
https://auth.smartmoneyapi.com/authorize?
client_id=YOUR_CLIENT_ID&
redirect_uri=https://yourapp.com/callback&
response_type=code&
scope=whale_positions+funding_rates+liquidations&
state=random_state_string
ステップ2:トークン交換
ユーザーが権限を付与した後、コードをアクセストークンと交換:
curl -X POST https://auth.smartmoneyapi.com/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code&code=AUTH_CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=https://yourapp.com/callback"
OAuthトークンレスポンス
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "rt_1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p",
"scope": "whale_positions funding_rates liquidations"
}
セキュリティのベストプラクティス
キーを安全に保管
APIキーをバージョン管理にコミットしたり、アプリケーションにハードコードしたり、ドキュメントで共有したりしないでください。環境変数やAWS Secrets Manager、HashiCorp Vaultなどの安全なキー管理サービスを使用します。
HTTPSのみを使用
すべてのAPIリクエストはHTTPS(TLS 1.2以上)を使用する必要があります。HTTPリクエストは拒否されます。これにより、APIキーとデータが転送中に暗号化されます。
キーの権限を制限
異なるアプリケーションや環境用に個別のAPIキーを作成します。スコープを使用して各キーがアクセスできるものを制限します。開発で本番キーを使用しないでください。
キーの使用を監視
コンソールでAPIの使用状況を定期的に確認します。異常な活動やクォータ制限に近づいた場合のアラートを設定します。使用していないキーは削除します。
キーローテーション
侵害のリスクを減らすために、定期的にAPIキーをローテーションします。90日ごとのキーローテーションを推奨:
- コンソールで新しいAPIキーを生成
- アプリケーションを更新して新しいキーを使用してください
- すべてが正しく動作するかテストしてください
- コンソールから古いキーを削除してください
スコープと権限
APIキーを作成する際やOAuthを使用する際に、キーがアクセスできるリソースを指定してください:
| スコープ |
説明 |
ティア |
| whale_positions |
クジラウォレットのポジションを読み取る |
Trader+ |
| funding_rates |
ファンディングレートデータを読み取る |
Free+ |
| liquidations |
清算フィードを読み取る |
Free+ |
| open_interest |
オープンインタレストデータを読み取る |
Trader+ |
| confirmation_scores |
AI確認スコアを読み取る |
Pro+ |
| on_chain |
オンチェーンメトリクスを読み取る |
Pro+ |
認証コード例
完全なPython統合
import requests
from typing import Optional, Dict
from datetime import datetime, timedelta
class SmartMoneyAuth:
"""Smart Money APIのすべての認証方法を処理"""
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.smartmoneyapi.com"
self.jwt_token = None
self.jwt_expires = None
def get_jwt_token(self) -> str:
"""JWTトークンを取得または更新"""
if self.jwt_token and self.jwt_expires > datetime.now():
return self.jwt_token
response = requests.post(
f"{self.base_url}/auth/jwt",
json={"api_key": self.api_key}
)
data = response.json()
self.jwt_token = data["token"]
self.jwt_expires = datetime.now() + timedelta(seconds=data["expires_in"] - 300)
return self.jwt_token
def headers_bearer(self) -> Dict:
"""Bearerトークン認証用のヘッダーを取得"""
return {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
def headers_jwt(self) -> Dict:
"""JWT認証用のヘッダーを取得"""
token = self.get_jwt_token()
return {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
def request(self, method: str, endpoint: str, use_jwt: bool = False, **kwargs) -> Dict:
"""認証済みリクエストを行う"""
headers = self.headers_jwt() if use_jwt else self.headers_bearer()
response = requests.request(
method,
f"{self.base_url}{endpoint}",
headers=headers,
**kwargs
)
return response.json()
# 使用例
auth = SmartMoneyAuth("sk_live_abc123xyz789")
# Bearerトークン方式
whales = auth.request("GET", "/v1/whales/events?symbol=BTCUSDT")
# JWT方式(自動更新)
whales_jwt = auth.request("GET", "/v1/whales/events?symbol=BTCUSDT", use_jwt=True)
print(f"Found {whales['data']['total']} whale positions")
ヘルプが必要ですか?
APIドキュメントを確認するか、認証に関するサポートが必要な場合はサポートにお問い合わせください。
APIリファレンス
最初のAPIキーを生成する
Smart Money APIを始めましょう。アカウントを作成し、数分で認証情報を生成できます。
コンソールに移動