ETrade 授权 API - 什么是共享机密和令牌机密?

问题描述

在 E*Trade 授权 API documentation for Get Request Token 上,它声明 oauth_signature 是使用“shared secrettoken secret生成的。

当我生成沙箱密钥时,我看到了以下信息:

Individual Consumer Key
Your active SANDBox API key is: abc123,and secret is: def456.

什么是 shared secrettoken secret,它们如何映射到上面提供的值?

解决方法

我想出了如何为 Get Request Token 生成签名。

同时需要 SANDBOX API keySANDBOX API secret

我相信 shared secret 指的是 SANDBOX API secret。似乎不需要 token secret 来为 Get Request Token 生成 oauth_signature

这是我使用 oauth-sign 库在 JavaScript 中生成 oauth_signature 的实现

const oauthsign = require("oauth-sign");

const oauth_consumer_key = "..."; // "SANDBOX API key"
const consumer_secret =  "..."; // "secret"
const oauth_timestamp = "1614463663"; // current time in seconds
const oauth_nonce = "123abc";
const oauth_signature_method = "HMAC-SHA1";
const oauth_callback = "oob"; // out-of-band callback
const base_uri = "https://apisb.etrade.com/oauth/request_token"; // N.B. "apisb"

const oauth_signature = oauthsign.hmacsign(
  "GET",base_uri,{ oauth_consumer_key,oauth_timestamp,oauth_nonce,oauth_signature_method,oauth_callback },consumer_secret
);
const paramsString = Object.entries({
  oauth_consumer_key,oauth_callback,oauth_signature
}).map(([k,v]) => `${k}=${v}`).join("&");

const result = `${base_uri}?${paramsString}`;
console.log(result);

// will produce a URL like
// https://apisb.etrade.com/oauth/request_token?oauth_consumer_key=...&oauth_timestamp=1614463663&oauth_nonce=123abc&oauth_signature_method=HMAC-SHA1&oauth_callback=oob&oauth_signature=...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...