获取运营商operator token
开发中
GET
/platform/management/operatorAPIToken
- 运营商使用平台 API 前,都需要调用这个接口,获取平台的授权 token
- 平台验证逻辑
0. 运营商向平台提出申请,申请通过后,由平台管理员,单独下发一个 secretKey 私钥给运营商- 运营商在调用平台 API 时,首先需要通过调用当前
/platform/management/operatorAPIToken
接口获取运营商的 API token - 成功验证身份后,平台会将 token 以 json response 的方式,返回给对应请求
- 运营商后续在所有针对平台 API 的 request header 中,添加该 token 等字段,签名后校验身份
- 运营商在调用平台 API 时,首先需要通过调用当前
- 获取 API token
- 调用
/platform/management/operatorAPIToken
这个接口,在 header 中填入相关参数,包括Datetime
,OperatorId
,Signature
三个字段 Datetime
: 调用该接口的时间(亚洲上海东八区), 格式yyyy-MM-dd HH:mm:ss
, e.g.2022-02-28 13:45:04
,如果请求到达平台服务端的时间与Datetime相差超过5分钟,将会返回权限错误OperatorId
: 运营商 id, 唯一, e.g.thisisanoperatorId
Signature
: 用户身份签名- 生成原始字符串,格式为
"datetime: yyyy-MM-dd HH:mm:ss\noperatorid: thisisanoperatorid"
- 采用 HMAC 算法,以平台分发的 secretKey 作为密钥字符串,对原始字符串进行散列
- 对结果采用 base64 编码
- signature 生成举例
- 生成原始字符串,格式为
- 调用
// 待签名原始字符串格式如下, 注意:后有一个空格, 最后一行结尾没有回车, 严格按照如下格式
// datetime: yyyy-MM-dd HH:mm:ss
// operatorid: xxxxx
private static String sign(
String secret, String toSignString
) throws NoSuchAlgorithmException, InvalidKeyException {
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(
secret.getBytes(StandardCharsets.UTF_8), mac.getAlgorithm()
);
mac.init(secretKeySpec);
byte[] bytes = mac.doFinal(toSignString.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(bytes);
}
public static String signSignature(
String secret, String datetime, String operatorId
) throws NoSuchAlgorithmException, InvalidKeyException {
String toSignString = String.format(
"datetime: %s\noperatorid: %s",
datetime, operatorId
);
return sign(secret, toSignString);
}
public static String signSignature(
String secret, String datetime, String operatorId, String token
) throws NoSuchAlgorithmException, InvalidKeyException {
String toSignString = String.format(
"datetime: %s\noperatorid: %s\ntoken: %s",
datetime, operatorId, token
);
return sign(secret, toSignString);
}
- 如果验证成功,返回结果会在
data
字段给出相应的 token 字符串
- 调用平台其他 API 请求
0. 首先完成/platform/management/operatorAPIToken
的请求- 对于其他 API,在 header 中加入四个字段
Datetime
,OperatorId
,Token
,Signature
Datetime
: 调用该接口的时间(亚洲上海东八区), 格式yyyy-MM-dd HH:mm:ss
, e.g.2022-02-28 13:45:04
,如果请求到达平台服务端的时间与Datetime相差超过5分钟,将会返回权限错误OperatorId
: 运营商 id, 唯一, e.g.thisisanoperatorId
Token
: 调用/platform/management/operatorAPIToken
的返回结果Signature
: 用户身份签名- 生成原始字符串,格式为
"datetime: yyyy-MM-dd HH:mm:ss\noperatorid: thisisanoperatorid\ntoken: thisisantoken"
(注意与获取 token 时的区别,需要增加一个\ntoken: ....
) - 采用 HMAC 算法,以平台分发的 secretKey 作为密钥字符串,对原始字符串进行散列
- 对结果采用 base64 编码
- 生成原始字符串,格式为
- 对于其他 API,在 header 中加入四个字段
- 特别注意: 创建代签名字符串(原始字符串)时,请严格按照上文中的字段顺序
请求参数
Header 参数
Datetime
string
调用接口的日期时间
示例值:
2022-02-28 13:45:04
OperatorId
string
运营商唯一id
示例值:
this is an operator id
Signature
string
签名
示例值:
thisisasdushrieuw
示例代码
返回响应
修改于 2022-04-12 04:34:54