【发布时间】:2022-09-29 00:31:56
【问题描述】:
由于 Flutter 不支持所有平台(移动和桌面)的任何地图 API,我正在尝试使用 Apple 的 Web Snapshots API 获取地图快照。这涉及使用各种选项构建 URL,然后对 URL 进行签名。我将签名附加到我的请求 URL 的末尾,以便 Apple 可以验证它来自我。
苹果的说明书状态:
要生成签名,请使用 ES256 算法(也称为 ECDSA,使用 P-256 曲线和 SHA-256 哈希算法)使用您的私钥对字符串进行签名。签名必须是 Base64 URL 编码的。
我不需要解密任何东西,我只需要对字符串进行签名并将其添加到我的请求 URL 的末尾。所以我认为我不需要 Flutter 附带的
crypto库之外的任何东西。这是我尝试过的:
import \'package:crypto/crypto.dart\'; //Private Key var key = utf8.encode(\'\'\' -----BEGIN PRIVATE KEY----- abcdef... -----END PRIVATE KEY----- \'\'\'); var bytes = utf8.encode(\'My URL String to Sign...\'); var hmacSha256 = Hmac(sha256, key); var sig = hmacSha256.convert(bytes); var signature = base64UrlEncode(sig.bytes);我得到一个难以理解的字符串
signature并将其添加到我的请求 URL,但我仍然得到一个401 Not Authorized错误,所以我的签名一定是不正确的。如何使用我的私钥正确签署我的 URL 字符串?
-
发布的代码使用与指定(ECDSA = 椭圆曲线 DSA)完全不同的算法 (HMAC)。您需要一个支持 ECDSA 的库,例如尖角城堡。
标签: flutter dart digital-signature