从 wasm-bindgen 到 C-ABI 写微信小程序WASM:一次真实的 WASM 落地复盘
在写完 ESP8266 IoT 架构之后,我就在想一件事情:既然代码开源,IoT 网关岂不是谁都能连? 于是我试图在微信小程序端做文章。但开源的小程序不能硬编码密钥,也不能仅靠接口鉴权。 我想到了很早之前预研的 WebAssembly(WASM)。配合后端防护,可以大幅提升攻击者的成本。 一、背景与目标 实现的功能非常简单: 传入 小程序 APPID + 设备 ID + 时间戳,使用 Ed25519 签名,返回 Token。 以前在微信小程序调通过 WxWebAssembly(简称 wxwasm),但当时主要处理 Int 类型,这次需要返回字符串。 当我拿出以前的预研代码进行修改时,我才意识到: “能用 Rust 写 WASM” 和 “能在微信小程序里稳定运行”,完全是两回事。 二、第一阶段:理想很丰满 —— Rust + wasm-bindgen 最初的环境是: Rust 1.95 wasm-bindgen wasm-pack Cargo.toml [dependencies] wasm-bindgen = "0.2" ed25519-dalek = { version = "2.1", features = ["rand_core"] } hex = "0.4" lib.rs [wasm_bindgen] pub fn generate_token(appid: &str, device_id: &str, timestamp: &str) -> Result<String, JsValue> { // Ed25519 签名逻辑 } 编译很顺利(就是有点慢 😭),本地 test.html 测试一切正常。 ...