@digicatapult/tsoa-oauth-express

中文文档
2.0.88发布于 2026/11/01Apache-2.0TypeScriptES Module构建来源已验证

使用OAuth2 JWT令牌的TSOA身份验证处理程序

中文使用文档

tsoa-oauth-express

此库可以轻松实现OAuth2身份验证 tsoa 在 表达. 要使用此库,首先将其添加为 npm 依赖于现有的 tsoa 应用程序。

npm i @digicatapult/tsoa-oauth-express

您的身份验证文件(请参阅tsoa关于身份验证设置的文档) 在这里)将需要包含如下内容:

import type express from 'express'
import type * as jwt from 'jsonwebtoken'

import mkExpressAuthentication, { AuthOptions } from '@digicatapult/tsoa-oauth-express'

// module options
const options: AuthOptions = {
  ...
}

export const expressAuthentication = mkExpressAuthentication(options)

的地方 options Value是具有以下类型和属性的对象:

interface AuthOptions {
  securityName?: string
  verifyOptions?: jwt.VerifyOptions & { complete?: false }
  jwksUri: () => Promise<string>
  getAccessToken: (req: express.Request) => Promise<string | undefined>
  getScopesFromToken: (decoded: string | jwt.JwtPayload) => Promise<string[]>
  tryRefreshTokens: (req: express.Request) => Promise<boolean>
}
财产要求描述
jwksUritrue解析为 uri 对于您的身份提供者 jwks 配置
getAccessTokentrue类解析JWT Request. 例如,这可能来自an authorization 页眉或 cookie 基于需求
getScopesFromTokentrue解析为所提供令牌支持的OAuth范围数组
securityNamefalseOpenAPI 要保护的安全方案名称
verifyOptionsfalsejsonwebtoken 验证选项。看到 jsonwebtoken文档 有关详细信息,
tryRefreshTokensfalse执行令牌刷新。解析为 true 否则刷新成功 false. 默认情况下,它总是解析为 false

例子

包存储库中包含一个使用OAuth客户机-凭据流对机器对机器(m2m) API进行身份验证的示例实现。它由两个部分组成,一个是预配置的 Keycloak 可以被实例化的实例 docker compose 作为我们的身份提供者和下面的示例应用程序 /。 它实现了 tsoa 服务器。欲了解更多信息,请参阅 Tsoa认证文档 我们的身份验证处理程序示例在 / / authentication.ts示例.

首先打开 Keycloak 实例,从存储库根目录执行:

docker compose up -d

这将自动预配置一个名为 example 客户端保密 example. 然后我们可以通过执行以下命令来获取一个m2m令牌:

curl --request POST \
  --url 'http://localhost:3080/realms/example/protocol/openid-connect/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials \
  --data client_id=example \
  --data client_secret=example

属性中返回一个JSON对象,该对象带有JWT验证令牌 access_token 属性的形式为 eyJhbGci...r8TIOfRQ.

然后可以使用以下命令运行示例服务器:

npm run example

该服务器监听端口3000并公开两条路由 /authenticated 和 /unauthenticated 其中只有第一条路由需要认证令牌。例如,我们可以调用

curl http://localhost:3000/unauthenticated

哪个应该返回类似的东西

{ "message": "This route is unauthenticated", "authenticated": false }

但是调用经过验证的路由(curl http://localhost:3000/authenticated)将返回一个错误

{ "message": "unauthenticated" }

提供JWT认证令牌作为认证头的一部分:

curl http://localhost:3000/authenticated --header 'authorization: bearer eyJhbGci...r8TIOfRQ'

导致调用成功:

{ "message": "This route is authenticated", "authenticated": true }

版本与发布记录

@digicatapult/tsoa-oauth-express 共发布 214 个版本,首次发布于 2024/05/14;过去 12 个月发布了 29 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.0.88latest2026/11/012 天前
2.0.872026/10/1519 天前
2.0.862026/10/1321 天前
2.0.852026/10/1321 天前
2.0.842026/10/0429 天前
2.0.832026/10/0430 天前

关于 @digicatapult/tsoa-oauth-express 的常见问题

@digicatapult/tsoa-oauth-express 是什么?

使用OAuth2 JWT令牌的TSOA身份验证处理程序

如何安装 @digicatapult/tsoa-oauth-express?

在项目目录运行 npm install @digicatapult/tsoa-oauth-express,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:express(^5.3.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@digicatapult/tsoa-oauth-express 支持 TypeScript 吗?

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

@digicatapult/tsoa-oauth-express 支持 ESM 还是 CommonJS?

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

@digicatapult/tsoa-oauth-express 可以商用吗?

@digicatapult/tsoa-oauth-express 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@digicatapult/tsoa-oauth-express 还在维护吗?

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