客户身份(CIAM)

附录

# 签名校验说明

为了让第三方应用确认事件推送来自IDaaS,IDaaS将事件推送给企业应用回调服务时,请求包体中包含请求签名并以参数sign标识,第三方应用需要验证此参数的正确性,验证步骤如下:

  1. 计算签名:计算签名由签名秘钥、Nonce值、时间戳、事件类型、消息体5部分组成,中间使用&进行连接。采用HMAC-SHA256+Base64算法进行加密。
  2. 比较计算的签名newSign与请求参数sign是否相等,相等则表示验证通过。
  3. 第三方应用按照要求返回响应消息格式。

示例如下:

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

# 数据解密说明

为了保证数据在传输发过程中不被泄露或窃取,IDaaS在传输数据时会对数据进行加密,第三方应用获取到数据后需要对数据进行解密,解密步骤如下:

  1. 对密文进行BASE64解码。

  2. 使用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