@qldc/auth

中文文档
0.1.4发布于 2026/11/02MITTypeScriptES Module

验证QLDC员工和Entra External ID访问令牌

中文使用文档
文档目录6 节
  1. 安装
  2. 使用
  3. 调试模式
  4. 先进的类型
  5. 发布(维护人员)
  6. 脚本

@qldc /身份验证

验证节点API中的QLDC劳动力和Entra External ID访问令牌。

包检查签名、显式的颁发者、受众、过期和 oid. 外部ID令牌是 public 并且当其电子邮件在呼叫者的工作电子邮件域列表中时被拒绝。劳动力令牌是 staff. 没有默认的发行者:应用程序通过它信任的发行者,并且空白的受众,发行者或工作邮件列表在启动时失败。

每个SPA都有自己的MSAL设置。 km-auth-extensions 自己检查微软的扩展服务令牌。

安装

npm install @qldc/auth

本地同胞结帐:

{
  "dependencies": {
    "@qldc/auth": "file:../km-auth"
  }
}

使用

import {
  QLDC_WORK_EMAIL_DOMAINS,
  createExternalIdVerifier,
  createWorkforceVerifier,
  externalIdIssuer,
  workforceIssuers,
} from "@qldc/auth";

const tenantId = process.env.ENTRA_TENANT_ID!;
const audience = process.env.ENTRA_AUDIENCE!;

const verifyWorkforce = createWorkforceVerifier({
  audience,
  ...workforceIssuers(tenantId),
  debug: process.env.NODE_ENV === "development", // optional: enable error logging
});

const verifyExternalId = createExternalIdVerifier({
  audience: process.env.EXTERNAL_ID_AUDIENCE!,
  issuer: externalIdIssuer(process.env.EXTERNAL_ID_TENANT_ID!),
  workEmailDomains: QLDC_WORK_EMAIL_DOMAINS,
  debug: process.env.NODE_ENV === "development", // optional: enable error logging
});

const staff = await verifyWorkforce(token); // AuthPrincipal | null
const pub = await verifyExternalId(token);

一个劳动力专用的应用程序创建 createWorkforceVerifier 并且不创建外部ID验证器。 workforceIssuers 包含v1颁发者(https://sts.windows.net/{tenant}/). 省略 v1 当应用程序不接受这些令牌时。

externalIdIssuer 使用 https://{tenant}.ciamlogin.com/{tenant}/v2.0. 登录主机 signin.qldc.govt.nz 不是令牌发行者。

观众接受GUID和 api://{guid} 形式相同的应用程序注册。其他 api:// 值必须与令牌完全匹配。

QLDC_WORK_EMAIL_DOMAINS 是 qldc.govt.nz, qlcht.org.nz, alpinewaters.co.nz. 匹配包括子域。只有当调用者传递该列表时,验证者才使用该列表。

经核实的委托人:

场意义
capabilitystaff 或者 public
oidEntra对象id。密钥公共用户数据由此。
emailemail, upn, preferred_username,或者 unique_name
roles, scp劳动力应用程序的角色和范围,当存在时

检查失败的令牌返回 null.

调试模式

启用 debug: true 在开发中,将验证失败记录到控制台:

const verifyWorkforce = createWorkforceVerifier({
  audience,
  ...workforceIssuers(tenantId),
  debug: true,
});

调试日志包括:

  • 无效的JWT格式错误
  • 令牌签名失败
  • 发行人/观众不匹配
  • 过期的问题
  • 工作邮件拒绝(仅限外部ID)

先进的类型

对于可观察性和监控,包导出了额外的类型:

import type {
  VerificationResult,
  VerificationFailureReason,
  TokenVerifierWithResult,
} from "@qldc/auth";

这些类型支持构建带有结构化错误响应的自定义验证器,而不仅仅是 null.

发布(维护人员)

CI使用 npm可信发布 (OIDC) -寿命不长 NPM_TOKEN.

  1. 在npmjs.com→包→ 设置→可信发布者:连接GitHub /repo和 publish.yml
  2. Bump版本和push标签;行动发布:
npm version patch   # or minor / major
git push --follow-tags

脚本

npm test
npm run build
npm run typecheck

版本与发布记录

@qldc/auth 共发布 4 个版本,首次发布于 2026/10/29;过去 12 个月发布了 4 个版本。

版本发布日期距今
0.1.4latest2026/11/021 天前
0.1.22026/10/295 天前
0.1.02026/10/295 天前
0.0.0-stage2026/10/295 天前

关于 @qldc/auth 的常见问题

@qldc/auth 是什么?

验证QLDC员工和Entra External ID访问令牌

如何安装 @qldc/auth?

在项目目录运行 npm install @qldc/auth,或使用 pnpm add / yarn add / bun add。

@qldc/auth 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@qldc/auth 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@qldc/auth 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@qldc/auth 可以商用吗?

@qldc/auth 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@qldc/auth 还在维护吗?

最新版本 0.1.4 发布于 2026/11/02(1 天前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/10/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。