進階認證模式 — OAuth 2.0、JWT、密鑰輪換

掌握整合 Smart Money API 至企業環境的複雜認證機制。學習 OAuth 2.0 流程、JWT 令牌模式、安全的密鑰輪換及多因素認證實作。

發佈於 2026 年 3 月 21 日 18 分鐘閱讀 進階

認證概述

Smart Money API 支援多種認證方法,旨在適應不同的應用架構、安全需求與組織政策。理解這些模式可確保您的整合既安全又高效。

Smart Money API 的認證運作分為三個主要層級:

  • API 金鑰 — 適用於開發與簡單整合的基礎 bearer token 認證
  • JWT 令牌 — 用於分散式系統與微服務的無狀態加密簽署令牌
  • OAuth 2.0 — 適用於第三方整合與 SaaS 應用的委派授權框架

安全原則: 切勿在客戶端代碼、日誌、版本控制或錯誤訊息中暴露認證憑證。應定期執行憑證輪換,並在遭洩露時立即更換。

每種方法各有優勢:API 金鑰最適合後端對後端通訊且憑證儲存受控的情境;JWT 令牌在無共享狀態的分散式架構中表現出色;OAuth 2.0 則為第三方應用提供使用者委派存取權限。

API 金鑰驗證

API 金鑰是最簡單的驗證機制——它們是為您的帳戶生成的隨機字串,用於向 Smart Money API 識別您的應用程式。每個請求都必須包含您的 API 金鑰,可以放在標頭或查詢參數中。

基於標頭的 API 金鑰

建議的方法是使用 Bearer 方案在 Authorization 標頭中傳遞您的 API 金鑰:

curl 範例
curl -X GET "https://api.smartmoneyapi.com/v1/whales/btc" \
-H "Authorization: Bearer sk_live_1234567890abcdef" \
-H "Accept: application/json"

查詢參數 API 金鑰

對於 WebSocket 連接或無法修改標頭的情況,請將 API 金鑰作為查詢參數傳遞:

WebSocket 連接
ws://localhost:8877/ws?api_key=sk_live_1234567890abcdef
// 建立已驗證的 WebSocket 串流

API 金鑰特性

屬性 描述
格式 128 字元的十六進位字串,前綴為 sk_test_ 或 sk_live_
範圍 繼承創建它的帳戶的所有權限
過期時間 不會自動過期;必須手動輪換
輪換 生成新金鑰,遷移流量,然後停用舊金鑰
速率限制 使用同一金鑰的所有請求共享

API 金鑰安全實踐

  • 環境變數 — 將金鑰儲存在 .env 檔案中(不提交到版本控制)並在運行時載入
  • 保管庫系統 — 生產環境請使用 HashiCorp Vault、AWS Secrets Manager 或 Azure Key Vault
  • 獨立密鑰 — 區分測試與正式環境密鑰,並定期輪換測試密鑰
  • 最小權限原則 — 盡可能為不同整合創建專用密鑰
  • 審計日誌 — 記錄所有 API 密鑰創建與使用事件
30 秒取得 API 密鑰

準備開始開發?立即獲取免費 API 密鑰(每日 100 次調用,免綁卡),開始獲取實時巨鯨數據、資金費率與鏈上數據。

取得 API 密鑰 →

Bearer Token 模式

Bearer tokens 在基礎 API 密鑰上擴展了上下文、有效期與刷新機制,適合需要程式化憑證管理的應用場景。

獲取 Bearer Tokens

使用 API 密鑰與私鑰兌換 24 小時有效的 bearer token:

GET /auth/token
curl -X POST "https://api.smartmoneyapi.com/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{
"api_key": "sk_live_1234567890",
"api_secret": "secret_abc123xyz"
}'

Token 響應格式

端點返回包含元數據的 bearer token:

響應範例
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 86400,
"refresh_token": "refresh_1234567..."
}

使用 Bearer Tokens

後續請求需在 Authorization 標頭中加入 token:

認證請求範例
curl -X GET "https://api.smartmoneyapi.com/v1/derivatives/funding-heatmap" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Token 刷新流程

當 token 即將過期時,使用 refresh token 無需提供 API 私鑰即可獲取新 token:

POST /auth/refresh
curl -X POST "https://api.smartmoneyapi.com/v1/auth/refresh" \
-H "Content-Type: application/json" \
-d '{
"refresh_token": "refresh_1234567..."
}'

OAuth 2.0 實現方案

OAuth 2.0 允許用戶授權應用程式存取其 Smart Money API 帳戶而無需共享憑證,此為 SaaS 平台、第三方整合與多租戶應用的核心機制。

OAuth 2.0 授權碼流程

網頁應用標準流程:

  1. 用戶發起登入 — 用戶點擊「透過 Smart Money API 連接」
  2. 跳轉至授權伺服器 — 您的應用將用戶重定向至 Smart Money 授權端點
  3. 用戶授予權限 — 用戶審核請求權限範圍並授權
  4. 返回授權碼 — 用戶被重定向回應用並附帶授權碼
  5. 兌換 token — 後端將授權碼兌換為存取 token(前端永不接觸授權碼)
  6. 儲存 token — 安全儲存刷新令牌;使用訪問令牌進行API調用

步驟1:將用戶重定向至授權端點

前端重定向
// 用戶重定向的URL
const authUrl = new URL('https://api.smartmoneyapi.com/oauth/authorize');
authUrl.searchParams.append('client_id', 'your_client_id');
authUrl.searchParams.append('redirect_uri', 'https://yourapp.com/callback');
authUrl.searchParams.append('response_type', 'code');
authUrl.searchParams.append('scope', 'whales derivatives onchain');
authUrl.searchParams.append('state', generateRandomState());
window.location.href = authUrl.toString();

步驟2:處理回調並交換代碼

後端代碼交換
// 後端處理/callback路由
const code = req.query.code;
const storedState = req.session.state;
const receivedState = req.query.state;
// 驗證狀態參數
if (storedState !== receivedState) {
throw new Error('狀態不匹配 - 檢測到CSRF攻擊');
}
// 將代碼交換為令牌
const tokenResponse = await fetch('https://api.smartmoneyapi.com/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
grant_type: 'authorization_code',
code: code,
client_id: process.env.OAUTH_CLIENT_ID,
client_secret: process.env.OAUTH_CLIENT_SECRET,
redirect_uri: 'https://yourapp.com/callback'
})
});
const tokens = await tokenResponse.json();
// 安全儲存令牌

OAuth 授權範圍

僅請求您的應用程序所需的範圍。Smart Money API定義了以下範圍:

範圍 描述
whales 訪問鯨魚錢包追蹤和累積指標
derivatives 訪問期貨、永續合約和資金費率數據
onchain 訪問鏈上交易流和分析
alerts 創建和管理Webhook警報
offline 訪問刷新令牌以在離線狀態下獲取新的訪問令牌

JWT 令牌管理

JWT(JSON Web令牌)提供無狀態驗證——服務器無需存儲會話數據。Smart Money API使用RS256(帶有SHA-256的RSA簽名)進行令牌簽署,允許在不聯繫API的情況下進行驗證。

JWT 結構

JWT令牌由三個部分組成,以點分隔:

JWT 格式
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEifQ.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFjY3QxMjM0In0.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
// HEADER.PAYLOAD.SIGNATURE

JWT 頭部

頭部標識算法和令牌類型:

解碼後的頭部
{
"alg": "RS256",
"typ": "JWT",
"kid": "1"
}

JWT 負載聲明

負載包含聲明(關於用戶/應用的陳述):

解碼後的負載
{
"sub": "acct_1234567890",
"name": "交易機器人",
"iat": 1703001600,
"exp": 1703088000,
"scopes": ["whales", "derivatives"],
"aud": "https://api.smartmoneyapi.com"
}

驗證 JWT 簽名

下載Smart Money的公鑰並在接受令牌前進行驗證:

Node.js 驗證
const jwt = require('jsonwebtoken');
const fs = require('fs');
// 從Smart Money API獲取公鑰
const publicKey = fs.readFileSync('smartmoney-public.pem');
// 驗證令牌
try {
const decoded = jwt.verify(token, publicKey, {
algorithms: ['RS256'],
audience: 'https://api.smartmoneyapi.com',
issuer: 'https://api.smartmoneyapi.com'
});
// 令牌有效,使用解碼後的聲明
} catch (err) {
// 令牌無效或已過期
}

密鑰輪換策略

定期輪換密鑰對於維護安全性至關重要。即使有完美的安全實踐,也應假設密鑰可能被洩露並實施系統化的輪換。

輪換頻率

Smart Money根據密鑰類型和用途推薦不同的輪換計劃:

密鑰類型 推薦輪換 最低輪換
測試API密鑰 每月 每季度
生產API密鑰 每季度 每年
OAuth 刷新令牌 自動(90天後) 手動(180天後)
服務帳戶密鑰 每半年 每年

零停機輪換過程

在不中斷服務的情況下輪換密鑰:

  1. 生成新密鑰 — 通過儀表板或API創建新的API密鑰
  2. 部署新密鑰 — 在預發布環境中更新應用程序密鑰,進行全面測試
  3. 逐步推出 — 部署到10%的服務器,監控錯誤
  4. 全面部署 — 部署至剩餘伺服器
  5. 驗證流量 — 確認所有請求使用新金鑰
  6. 停用舊金鑰 — 標記舊金鑰為非活躍狀態但暫不刪除
  7. 刪除舊金鑰 — 48小時無錯誤後永久刪除

緊急金鑰輪換

若懷疑金鑰遭洩漏:

緊急輪換
// 立即行動:停用遭洩金鑰
curl -X POST "https://api.smartmoneyapi.com/v1/keys/sk_live_xxx/revoke" \
-H "Authorization: Bearer token"
// 立即生成替換金鑰
curl -X POST "https://api.smartmoneyapi.com/v1/keys" \
-H "Content-Type: application/json" \
-d '{
"name": "緊急替換金鑰"
}'

Kubernetes自動輪換

使用Kubernetes Secrets和運算元實現自動輪換:

金鑰輪換CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: api-key-rotator
spec:
schedule: "0 0 * * 0" # 每週日執行
jobTemplate:
spec:
template:
spec:
containers:
- name: rotator
image: smartmoney-key-rotator:latest

多因素認證(MFA)

存取生產資料的帳戶需啟用MFA,透過第二驗證因子強化安全性。

支援的MFA方法

  • TOTP (基於時間的一次性密碼) — 如Google Authenticator、Authy等應用
  • WebAuthn/FIDO2 — 硬體安全金鑰、生物識別
  • 簡訊一次性驗證碼 — 安全性較低但普遍支援
  • 電子郵件確認 — 驗證碼發送至註冊郵箱

為帳戶啟用TOTP

啟用MFA
// 步驟1:請求MFA設定
curl -X POST "https://api.smartmoneyapi.com/v1/account/mfa/enable" \
-H "Authorization: Bearer token"
// 回應包含QR碼網址
{
"qr_code_url": "https://...",
"secret": "JBSWY3DPEBLW64TMMQ...",
"backup_codes": ["12345678", ...]
}

API操作中的MFA

部分操作即使通過驗證仍需要MFA確認:

MFA挑戰
// 嘗試敏感操作(金鑰輪換)
curl -X POST "https://api.smartmoneyapi.com/v1/keys/rotate" \
-H "Authorization: Bearer token" \
-H "X-MFA-Token: mfa_challenge_abc123"
// 回應:需MFA驗證
{
"error": "mfa_required",
"mfa_token": "mfa_xyz789"
}
// 使用TOTP碼重試
curl -X POST "https://api.smartmoneyapi.com/v1/keys/rotate" \
-H "Authorization: Bearer token" \
-H "X-MFA-Code: 123456"

安全最佳實踐

驗證強度取決於實施方式。遵循以下實踐以維護安全:

機密資訊管理

  • 切勿將機密資訊提交至版本控制 — 使用.gitignore排除.env檔案
  • 使用環境變數 — 從安全密鑰管理系統載入
  • 掃描儲存庫 — 使用TruffleHog、detect-secrets等工具檢測外洩金鑰
  • 稽核存取日誌 — 監控機密存取者與時間

傳輸安全

  • 始終使用HTTPS — 切勿透過未加密連線傳送憑證
  • 驗證SSL憑證 — 生產環境禁止停用憑證驗證
  • 使用憑證綁定 — 防止移動應用中間人攻擊
  • 強制TLS 1.2+ — 停用舊版通訊協定

憑證處理

  • 雜湊處理機密資訊 — 儲存bcrypt或Argon2雜湊值,禁止明文
  • 最小化存留時間 — 僅在需要時將憑證保留於記憶體
  • 清除敏感資料 — 使用後明確覆寫憑證
  • 使用安全函式庫 — 勿自行實作加密演算法

日誌與監控

  • 禁止記錄憑證 — 日誌中的金鑰需脫敏,使用日誌遮罩
  • 記錄驗證事件 — 追蹤成功與失敗的登入嘗試
  • 監控異常行為 — 異常存取模式觸發警報
  • 稽核金鑰使用 — 追蹤金鑰存取資料範圍

企業驗證模式

大型組織通常需要額外安全控制與合規能力。

SAML 2.0整合

企業客戶可將Smart Money API與組織身份供應商(Okta、Azure AD等)整合:

  • 單一登入(SSO) — 用戶透過企業IdP驗證
  • 自動佈建 — 依群組成員建立/停用帳戶
  • 強制執行 — 所有用戶存取需通過SAML

IP白名單

限制API訪問至特定IP地址或CIDR範圍:

IP白名單管理
// 添加IP至白名單
curl -X POST "https://api.smartmoneyapi.com/v1/account/ip-whitelist" \
-H "Authorization: Bearer token" \
-d '{
"cidr": "203.0.113.0/24",
"description": "生產伺服器"
}'

審計日誌與合規

企業計劃包含全面的審計日誌以符合合規要求:

事件 記錄數據
認證 用戶、時間戳、成功/失敗、IP、MFA狀態
密鑰操作 密鑰ID、操作、發起者、時間戳
帳戶變更 變更內容、變更者、時間戳、變更前/後值
數據訪問 用戶、端點、範圍、時間戳、記錄數量

排查認證問題

無效API密鑰錯誤

問題: 收到"401未授權 - 無效API密鑰"

解決方案:

  • 驗證密鑰格式(應以sk_test_或sk_live_開頭)
  • 檢查密鑰前後是否有空白字符
  • 確認密鑰未被停用或輪換
  • 確認您使用的是正確的環境(測試密鑰用於測試,正式密鑰用於生產)
  • 檢查API密鑰權限是否符合端點要求

令牌過期錯誤

問題: Bearer令牌過期,請求失敗

解決方案:

  • 使用刷新令牌獲取新的訪問令牌
  • 在到期前5分鐘實現自動令牌刷新
  • 安全存儲刷新令牌(不要在SPA的localStorage中存儲)
  • 通過嘗試刷新令牌流程處理401響應

CORS/預檢錯誤

問題: 瀏覽器因CORS錯誤阻止請求

解決方案:

  • 從瀏覽器發出的API調用必須來自白名單的來源
  • 通過儀表板添加您的域名:設置 → CORS來源
  • 瀏覽器會自動發送OPTIONS預檢請求
  • 開發時,使用localhost:3000或類似地址

MFA挑戰未完成

問題: 即使輸入正確的代碼,需要MFA的操作仍失敗

解決方案:

  • 確保伺服器時鐘同步(TOTP依賴於時間)
  • 代碼僅在30秒內有效,生成新的代碼
  • 如果驗證器應用不可用,使用備用代碼
  • 通過註冊的電子郵件進行帳戶恢復

立即實施安全認證

Smart Money API支持企業級認證,包括OAuth 2.0、JWT、MFA和SAML集成。使用行業最佳實踐保護您的API集成。

查看企業計劃
需要SAML、IP白名單或專屬支持?聯繫我們的銷售團隊。

相關資源

免費開始 — 每天100次調用,無需信用卡

從一個API獲取實時大戶資金流、資金費率、未平倉合約和鏈上數據,涵蓋3個交易所。免費層級,無需信用卡,隨時升級。

免費開始 →
試用實時API控制台 → (無需帳戶)