You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Deno环境中创建Adobe JWT Token?求替代方案

Deno环境下替代@adobe/jwt-auth的方案

方案1:手动基于Deno JWT库实现Adobe认证流程

Adobe的JWT认证本质是遵循标准JWT规范的定制化流程,你可以用Deno生态的JWT库(比如djwt)手动完成签名和token请求:

  1. 安装依赖
deno add djwt
  1. 核心实现代码
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:45:55