在Deno中使用Box Node SDK出现‘Not implemented: crypto.Sign’错误求助
在Deno v1.30.3中使用Box Node SDK遇到crypto.Sign未实现的问题
我在Deno(v1.30.3)中尝试使用Box Node SDK(v2.8.1),编写了如下代码:
import BoxSDK from "npm:box-node-sdk@2.8.1"; import conf from "/path/to/config.json" assert {type: "json"}; const sdk = BoxSDK.getPreconfiguredInstance(conf); const client = sdk.getAppAuthClient("enterprise"); client.users.get(client.CURRENT_USER_ID).then((me: any) => { console.log(me); // should print user’s name })
运行代码后出现以下错误:
error: Uncaught Error: Not implemented: crypto.Sign throw new Error(message); ^ at notImplemented (https://deno.land/std@0.177.0/node/_utils.ts:23:9) at new Sign (https://deno.land/std@0.177.0/node/internal/crypto/sig.ts:45:5) at Object.createSign (https://deno.land/std@0.177.0/node/crypto.ts:268:10) at Object.sign (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/jwa/1.4.1/index.js:151:25) at Object.jwsSign [as sign] (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/jws/3.2.2/lib/sign-stream.js:32:24) at Object.module.exports [as sign] (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/jsonwebtoken/8.5.1/sign.js:204:16) at TokenManager.getTokensJWTGrant (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/box-node-sdk/2.8.1/lib/token-manager.js:286:48) at AppAuthSession._refreshAppAuthAccessToken (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/box-node-sdk/2.8.1/lib/sessions/app-auth-session.js:79:18) at AppAuthSession.getAccessToken (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/box-node-sdk/2.8.1/lib/sessions/app-auth-session.js:124:25) at BoxClient._makeRequest (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/box-node-sdk/2.8.1/lib/box-client.js:300:18) at BoxClient.get (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/box-node-sdk/2.8.1/lib/box-client.js:452:21) at wrappedClientMethod (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/box-node-sdk/2.8.1/lib/box-client.js:589:30) at Users.get (file:///Users/hkobayashi/Library/Caches/deno/npm/registry.npmjs.org/box-node-sdk/2.8.1/lib/managers/users.js:42:67) at file:///Users/hkobayashi/dev/poc/poc24-deno/2023-02/box-hello.ts:8:14
请问这是否说明Deno的crypto库尚未完全实现?有没有可行的解决办法?
问题原因
是的,这个错误明确说明Deno的Node.js兼容层中crypto.SignAPI尚未实现。从错误栈可以看到,Box SDK依赖的jsonwebtoken库调用了Node.js的crypto.createSign方法,而你使用的Deno标准库(std@0.177.0)对该API的支持还不完善。
可行的解决办法
- 升级Deno版本:后续的Deno稳定版(如v1.40及以上)对Node.js crypto模块的兼容做了大幅改进,补全了大量未实现的API。升级到最新版后,这个问题大概率会得到解决。
- 替换依赖实现:如果暂时无法升级Deno,可以尝试手动替换Box SDK底层的JWT签名逻辑,改用Deno原生
cryptoAPI完成签名。不过这需要修改Box SDK的依赖链(比如替换jsonwebtoken为支持Deno的JWT库),或者自行实现TokenManager的签名部分,操作复杂度较高。 - 启用不稳定兼容特性:运行代码时添加
--unstable标志,部分未稳定的Node.js兼容API可能会被启用,但这个方法不一定能解决crypto.Sign的缺失问题,需要实际测试。 - 直接调用Box REST API:绕开Box Node SDK,使用Deno原生
fetchAPI直接调用Box的REST接口,自行处理JWT签名逻辑。这种方式完全基于Deno原生API,无需依赖Node.js兼容层,能彻底避免此类问题。
内容的提问来源于stack exchange,提问作者Hiro
相关产品推荐
相关产品推荐

