如何在Deno环境中创建Adobe JWT Token?求替代方案
Deno环境下替代@adobe/jwt-auth的方案
方案1:手动基于Deno JWT库实现Adobe认证流程
Adobe的JWT认证本质是遵循标准JWT规范的定制化流程,你可以用Deno生态的JWT库(比如djwt)手动完成签名和token请求:
- 安装依赖
deno add djwt
- 核心实现代码
import { create } from "djwt"; import { Client } from "std/http/client.ts"; // 替换为你的Adobe认证信息 const config = { clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", technicalAccountId: "YOUR_TECH_ACCOUNT_ID", orgId: "YOUR_ORG_ID@AdobeOrg", privateKey: await Deno.readTextFile("./private.key"), // 读取本地私钥文件 metaScopes: ["ent_cloudmgr_sdk"], // 替换为你的权限范围 }; // 构造JWT Payload const payload = { exp: Math.floor(Date.now() / 1000) + 3600, // 1小时有效期 iss: config.orgId, sub: config.technicalAccountId, aud: `https://ims-na1.adobelogin.com/c/${config.clientId}`, "https://ims-na1.adobelogin.com/s/ent_cloudmgr_sdk": true, // 对应metaScopes的格式 }; // 生成JWT签名 const jwt = await create( { alg: "RS256", typ: "JWT" }, payload, config.privateKey, ); // 请求Adobe获取访问令牌 const response = await fetch( "https://ims-na1.adobelogin.com/ims/exchange/jwt", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: new URLSearchParams({ client_id: config.clientId, client_secret: config.clientSecret, jwt_token: jwt, }), }, ); const tokenData = await response.json(); console.log("访问令牌:", tokenData.access_token);
方案2:利用Deno的npm兼容模式适配原包
Deno支持直接导入npm包,你可以尝试导入@adobe/jwt-auth,并补全NodeJS特有的API依赖:
// 导入npm包 import jwtAuth from "npm:@adobe/jwt-auth"; // 补全NodeJS fs模块的Deno兼容实现 import * as fs from "node:fs"; fs.readFile = async (path: string) => Deno.readFile(path); // 按原包文档调用 const config = { clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", technicalAccountId: "YOUR_TECH_ACCOUNT_ID", orgId: "YOUR_ORG_ID", privateKey: "./private.key", metaScopes: ["ent_cloudmgr_sdk"], }; const token = await jwtAuth(config); console.log(token.access_token);
注意:这种方法可能存在兼容性问题,比如部分NodeJS核心API的差异,需要根据报错调整polyfill。
方案3:封装轻量自定义模块
如果上述方案有兼容问题,可以提取Adobe JWT认证的核心逻辑,封装成不依赖NodeJS API的Deno模块:
- 用Deno标准库处理文件读取、Base64编码
- 用
djwt完成JWT签名 - 用标准HTTP客户端发送token请求
本质和方案1类似,但可以封装成可复用函数,方便项目内多次调用。
内容的提问来源于stack exchange,提问作者codepleb
相关产品推荐
相关产品推荐

