客户身份(CIAM)
附录
# 签名校验说明
为了让第三方应用确认事件推送来自IDaaS,IDaaS将事件推送给企业应用回调服务时,请求包体中包含请求签名并以参数sign标识,第三方应用需要验证此参数的正确性,验证步骤如下:
- 计算签名:计算签名由签名秘钥、Nonce值、时间戳、事件类型、消息体5部分组成,中间使用&进行连接。采用HMAC-SHA256+Base64算法进行加密。
- 比较计算的签名newSign与请求参数sign是否相等,相等则表示验证通过。
- 第三方应用按照要求返回响应消息格式。
示例如下:
String message = nonce + "&" + timestamp + "&" + eventType + "&" + data;
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(签名秘钥.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
mac.init(secretKey);
String newSign = Base64.getEncoder().encodeToString(mac.doFinal(message.getBytes(StandardCharsets.UTF_8)));
if (!newSign.equals(sign)) {
response.setStatus(400);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 数据解密说明
为了保证数据在传输发过程中不被泄露或窃取,IDaaS在传输数据时会对数据进行加密,第三方应用获取到数据后需要对数据进行解密,解密步骤如下:
对密文进行BASE64解码。
使用AESKey进行解密。
示例如下:
byte[] encryptStr = Base64.getDecoder().decode(data);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec secretKey = new SecretKeySpec(加密密钥.getBytes(StandardCharsets.UTF_8), "AES");
cipher.init(2, secretKey);
byte[] bytes = cipher.doFinal(encryptStr);
String dataStr = new String(bytes, StandardCharsets.UTF_8);
1
2
3
4
5
6
2
3
4
5
6