@defra/hapi-auth-oidc

中文文档
0.6.1发布于 2026/11/04OGL-UK-3.0ES Module构建来源已验证近 30 天下载 4593

一个轻量级的Node.js库,用于使用OIDC令牌和hopi服务器集成进行认证.

中文使用文档
文档目录13 节
  1. 特征
  2. 安装
  3. 使用量
  4. 从图书馆导入
  5. 注册插件
  6. 装饰请求
  7. 托肯刷新
  8. 配置
  9. 插件选项
  10. 托肯供应商
  11. 认知托肯
  12. 提供模拟器
  13. 示例使用

Hapi Auth OIDC (英语)

一个Hapi.js插件提供OpenID Connect(OIDC)认证,并有PKCE支持. 支持联邦的Cognitto活符,模拟活符测试,以及自动活符验证和刷新. 为服务器侧Hapi应用程序所设计.

特征

  • 使用 PKCE 支持登录重定向到 OIDC 提供者
  • Auth callback 处理令牌验证
  • 以可配置的早期刷新窗口自动刷新访问令牌
  • 联邦通过Cognitto身份池提供象征性支持
  • 请求装饰确保ValidToken、登录和处理回调
  • 用于开发和测试环境的模拟OIDC供应商
  • 窗体 post and question auth 回调支持
  • 完整的可配置饼干选项

安装

npm install @defra/hapi-auth-oidc

使用量

从图书馆导入

所有公共功能、提供者和插件都从库入口导出 :

import {
  HapiAuthOidcPlugin,
  CognitoTokenProvider,
  MockProvider,
  preLogin,
  postLogin,
  ensureValidToken
} from '@defra/hapi-auth-oidc'

或者,将整个库导入为命名空间 :

import * as OIDC from '@defra/hapi-auth-oidc'
const plugin = OIDC.HapiAuthOidcPlugin
const tokenProvider = new OIDC.CognitoTokenProvider({...})

注册插件

import Hapi from '@hapi/hapi'
import { AuthOidcPlugin } from './auth-oidc.js'

const server = Hapi.server({ port: 3000 })

await server.register(AuthOidcPlugin)

装饰请求

server.route({
  method: 'GET',
  path: '/protected',
  handler: async (request, h) => {
    const { token, refreshed } = await request.ensureValidToken(
      request.auth.credentials
    )
    return { token }
  }
})

托肯刷新

独立使用 :

import { ensureValidToken } from '@defra/hapi-auth-oidc'

const refreshedToken = await ensureValidToken(
  { accessToken, refreshToken },
  getOidcConfig,
  60000,
  oidcScope,
  logger
)

配置

插件选项

  • oidc - OIDC配置对象 :

    • clientId - OIDC客户身份
    • discoveryUri - OIDC 发现文件的 URL
    • authProvider - 托肯供应商(CognitoTokenProvider 或者说 MockProvider(中文(简体) )
    • useHttp - 布尔旗允许不安全的 HTTP 请求发现( 默认: 虚假)
    • loginCallbackUri - OIDC 登录后重定向 URI
    • scope - 以空间分隔的一串瞄准镜
    • externalBaseUrl - 用于构建绝对回调URL的基础URL
    • defaultPostLoginUri - 在登录后重新定向未另指明的URI(默认: '/'(中文(简体) )
    • earlyRefreshMs - 令牌过期前毫秒提前刷新(默认:6000)
  • cookieOptions - 铁加密和安全的 Cookie 选项

    • password - 用于铁加密的秘密(需要)
    • isSecure - 只通过 HTTPS 发送 cookie( 默认: 真)
    • encoding - 说吧 'none' | 'base64' | 'base64json' | 'iron' (默认 : 'iron'(中文(简体) )
    • path - Cookie 路径( 默认 ): '/'(中文(简体) )
    • isHttpOnly - 客户端JS无法访问 Cookie(默认:真实)
    • isSameSite - 说吧 'Strict' | 'Lax' | 'None' (默认 : 'Lax'(中文(简体) )
    • ttl - 以毫秒计的时间(可选)
    • domain - Cookie域名( 可选)
    • ignoreErrors - 忽略编码错误( 默认: 真)
    • clearInvalid - 自动清除无效的 cookie( 默认: 真)

托肯供应商

认知托肯

  • AWS Cognito身份池的联邦标志提供商.
  • 自动缓存令牌并在到期前刷新.
  • 支持通过可选的早期刷新 earlyRefreshMs。 。 。 .

提供模拟器

  • 用于开发/测试的简单模拟符号提供者.
  • 返回一个已编码的硬码 .

示例使用

import { config } from '../../../config/config.js'
import {
  CognitoTokenProvider,
  HapiAuthOidcPlugin,
  MockProvider
} from '@defra/hapi-auth-oidc'

const authProvider = config.get('isProduction')
  ? new CognitoTokenProvider({
      poolId: config.get('azureFederatedCredentials.identityPoolId'),
      logins: { 'cdp-portal-frontend-aad-access': 'cdp-portal-frontend' }
    })
  : new MockProvider({})

const oidcCookieConfig = config.get('hapi-auth-oidc.cookie')

export const AuthOidcPlugin = {
  plugin: HapiAuthOidcPlugin,
  options: {
    oidc: {
      clientId: config.get('azureClientId'),
      discoveryUri: config.get('oidcWellKnownConfigurationUrl'),
      authProvider,
      useHttp: config.get('isProduction'),
      loginCallbackUri: config.get('appBaseUrl') + '/auth/callback',
      scope: `api://${config.get('azureClientId')}/cdp.user openid profile email offline_access user.read`,
      externalBaseUrl: config.get('appBaseUrl')
    },
    cookieOptions: {
      isSecure: oidcCookieConfig.isSecure,
      password: oidcCookieConfig.password
    }
  }
}

版本与发布记录

@defra/hapi-auth-oidc 共发布 13 个版本,首次发布于 2026/02/11;过去 12 个月发布了 13 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.6.1latest2026/11/048 天前
0.6.02026/10/051 个月前
0.5.62026/07/074 个月前
0.5.52026/06/294 个月前
0.5.42026/06/224 个月前
0.5.32026/06/224 个月前

关于 @defra/hapi-auth-oidc 的常见问题

@defra/hapi-auth-oidc 是什么?

一个轻量级的Node.js库,用于使用OIDC令牌和hopi服务器集成进行认证.

如何安装 @defra/hapi-auth-oidc?

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

@defra/hapi-auth-oidc 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/defra__hapi-auth-oidc 是否存在。

@defra/hapi-auth-oidc 支持 ESM 还是 CommonJS?

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

@defra/hapi-auth-oidc 需要什么版本的 Node.js?

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

@defra/hapi-auth-oidc 可以商用吗?

@defra/hapi-auth-oidc 使用 OGL-UK-3.0 许可。声明的许可为 OGL-UK-3.0,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@defra/hapi-auth-oidc 的下载量有多少?

根据 npm 官方下载统计,@defra/hapi-auth-oidc 在 2026/10/12 – 2026/11/10 这 30 天内被下载 4,593 次,日均约 153 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@defra/hapi-auth-oidc 还在维护吗?

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