@defra/lis-hubs-infra-access

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

牲畜平台共享枢纽接入和能力分辨率.

中文使用文档
文档目录16 节
  1. 安装
  2. 使用量
  3. Hapi 认证计划
  4. 准入决定如何运作
  5. 环境变量
  6. 先决条件
  7. 设置
  8. 发展
  9. 测试
  10. 正在发展中
  11. 正在测试
  12. 管道
  13. 分支政策
  14. 协助这一项目
  15. 许可证
  16. 关于许可证

下层访问

畜牧信息服务(LIS)的一部分,它允许牲畜饲养者、所有者、代理商和牲畜饲养者使用 代表们记录和管理他们的动物.

@defra/lis-hubs-infra-access 是一个共享 npm 软件包, 提供 hopi 认证方案, 为地雷影响调查中心和演讲者举办的会议和访问决定。 它以 OpenID 连接处理登录 (OIDC),中枢会话,中枢与服务符号传递给发言人,并翻译 身份提供者在LIS角色和权限中的作用.

它故意不持有供应商特定配置或索赔映射。 每个中心都保留着 自己:前台使用Defra CI角色,后台使用Microsoft Entra ID角色. 这个 不决定中心站所服务的模块(见 登记)或向 发言(见 双核) (中文(简体) ).

用于:

安装

npm install @defra/lis-hubs-infra-access @defra/lis-hubs-infra-core @defra/lis-hubs-infra-registry @hapi/boom

@defra/lis-hubs-infra-core, (中文(简体) ), @defra/lis-hubs-infra-registry 财务报告和审定财务报表 @hapi/boom 是对等点 依赖,所以消耗的应用也必须安装. 见 package.json 支助 各个版本.

使用量

Hapi 认证计划

通过两个Hapi认证方案认证枢纽和语音,每个方案登记为 服务器的默认策略 。 身份已经公布 request.auth.credentials.user (单位:千美元)request.app 不具备认证状态; @defra/lis-infra-ui-services尼姑 上下文 demandPermission 从那里读取. 路由选择退出 auth: false (资产, /health)或接受使用 auth: { mode: 'try' } 或者说 auth: { mode: 'optional' }签字退出 try编号 :optional 请求,在一个中心 或一个说话,没有证书,所以 caller 这些请求不能提供.

入口点 :

导入出口
@defra/lis-hubs-infra-access/authenticationcreateHubAuth, (中文(简体) ), HUB_AUTH_STRATEGY, (中文(简体) ), createSpokeAuth, (中文(简体) ), SPOKE_AUTH_STRATEGY, (中文(简体) ), createOidcClient, (中文(简体) ), getHubJwt, (中文(简体) ), issueHubJwt, (中文(简体) ), verifyHubJwt
@defra/lis-hubs-infra-access/authorizationPERMISSIONS, (中文(简体) ), hasPermission, (中文(简体) ), demandPermission, (中文(简体) ), resolveAuthorization, (中文(简体) ), GLOBAL_CPH_SCOPE, (中文(简体) ), AUTHORIZATION_VERSION
@defra/lis-hubs-infra-access以上均为 authentication 财务报告和审定财务报表 authorization 命名空间

偏好子路径的导入:它们给出了简单命名的输入和简单的模拟 (单位:千美元)vi.mock('@defra/lis-hubs-infra-access/authorization')) (中文(简体) ).

import { createSpokeAuth } from '@defra/lis-hubs-infra-access/authentication'
import {
  hasPermission,
  PERMISSIONS
} from '@defra/lis-hubs-infra-access/authorization'

说话: createSpokeAuth

await server.register(
  createSpokeAuth({
    spokeId: 'cattle-home',
    hubOrigins,
    port,
    basePath,
    secret,
    audience,
    moduleAccess,
    authorize: async (user, request) => true // optional
  })
)

登记 lis-spoke 方案作为默认策略。 请求:

  1. 必须在 Authorization: Bearer <token>,则 401 { message: 'Service authentication required' } 在每个路线模式, public 包括发言;
  2. 必须在 x-lis-jwt-assertion 标题 (单位:千美元)JWT_ASSERTION_HEADER 从 @defra/lis-hubs-infra-core除非说话的人 public. 没有一个人, 需要的路由重定向到 <hubOrigin>/auth/login?returnUrl=…,则a try 路线继续未经认证;
  3. 然后获得 credentials: { user, caller }时 caller 是中枢的 服务名称.

然后核对已认证的请求 moduleAccess (非公开) 和可选办法 authorize 上游; 失败者或给出403. 工厂扔了一个未知的 spokeId 无效 moduleAccess。 。 。 .

中心代理设置 x-lis-jwt-assertion 代理请求的标题; 发言 jWT中心从未被视为饼干,而作为饼干发送的JWT则被忽略. 信头只是因为服务符号检查先运行,所以 createSpokeAuth 不需要饼干选择.

服务代号为AWS STS网络身份代号,由中枢所附加 代理在 @defra/lis-hubs-infra-core它必须:

  • 成为 RS256 JWT 的密钥签名 CDP_JWT_JWKS_URI发布 CDP_JWT_ISSUER,带有 exp 索赔
  • 有观众 lis-apps-<spokeId>
  • 将呼叫者命名为 lis-hubs-front-office 或者说 lis-hubs-back-office 输入 https://sts.amazonaws.com/ 索赔 principal_tags.ServiceName

CDP_JWT_ISSUER 财务报告和审定财务报表 CDP_JWT_JWKS_URI 必须在 createSpokeAuth 实值 称为;CDP平台提供. JWKS是用内置的来获取的 fetch,通过 CDP 代理通过全球调度器 setupProxy (单位:千美元)@defra/lis-infra-ui-services)安装.

汉克: createHubAuth

await server.register(
  createHubAuth({
    hubId: 'front-office',
    getHubJwtConfig,
    resolveAuthSession,
    buildAuthorizationUrl,
    completeAuthorizationCodeGrant,
    buildLogoutUrl,
    getLogoutOrigins, // from createOidcClient, like buildLogoutUrl
    loginRoutes,
    notAuthorisedPath: '/auth/access-denied', // optional, defaults to '/auth/not-authorised'
    authorize: async (user, request) => true // optional
  })
)

注册登录和 /sso 路线, POST /signout, (中文(简体) ), GET /signout 财务报告和审定财务报表 GET /auth/logout (所有项目) auth: false)和未经授权的路线(auth: try)加上 lis-hub-session 方案作为默认策略,由yar中枢会话支持。 签约 用户在要求的路由中被重定向到第一个登录路由,使用 ?returnUrl=<path+search>页:1 try 路线一直没有经过认证. 全权证书为: { user, authorizedSpecies, caller }时 caller 这是 中枢自己的服务名称( u)lis-hubs-<hubId>,匹配 caller 说话 看到了吗. hubId 必须是登记中心。 可选 authorize 仅对经认证的请求进行上游运行; false 拒绝请求 (见下文).

JWT在签注时所铸造的枢机保存在枢机的yar会话中,而不是在一个 浏览器 cookie,所以浏览器只持有会话 cookie. getHubJwt(request) 返回(或) null),而中枢的代理在代理语音上注入 请求 x-lis-jwt-assertion 页眉 (e)JWT_ASSERTION_HEADER 从 @defra/lis-hubs-infra-core) (中文(简体) ). 签署重排会话, 从而放弃 JWT .

标出(和未授权的页面)头是链接到 GET /signout, (中文(简体) ), 从未签名的: 带有 CSRF 符号的会话( 只有已签名的会话) (一) 它使 auth/sign-out 视图来自 @defra/lis-infra-ui-services, (中文(简体) ), 请用户用 Sign out 按钮,或 Cancel; 任何其他人被重定向到 /旧的 GET /auth/logout 重定向 改为 /signout。 。 。 .

POST /signout 构建身份提供者的结束会话 URL,重新设置 会话( 即使构建 URL 失败, 当错误传播时) 和 转向那里。 中心必须注册 csrfPlugin 从 @defra/lis-infra-ui-services/csrf 与 { tokenSource: 'session' },哪个 要求该员额必须是同一来源的,并携带会议符号 _csrf 字段。 插件被宣布为依赖性, 所以没有 注册失败启动 。 无法选中任一选项( 过期会话) 或请求被伪造) /,通过插件的路径 failAction,而不是回答403.

浏览器在表单贴出后按住每个重定向到贴出页面的 CSP form-action,这是 'self' 在每一个中枢页面。 所以确认页 仅允许签注的出处: getLogoutOrigins(request) 给出会场结束点的出处、发行者(身份提供者) 自定义域重定向到它的发行主机以完成)和日志后 重定向 URI 的( 从配置的中枢源头, 它可能不是 从同一处 发现元数据和提供者 buildLogoutUrl在中心布兰基之后 插件 (e)blankie)设置了标题,一个 onPreResponse 钩子附着到 页:1 form-action 指令,留下其余政策 如来相. Blankie自己的路线选择不能做到这一点:它们取代整个 政策并固定在路线登记上。 如果发现失败 仍在确认页面,使用 form-action 左为 'self',则 错误已登录; 退出后仍然重新设置会话 .

一个成功的登录 /sso 清除会话的CSRF符号,所以一个新的是 页:1.

中心级拒绝将认证和授权分开:用户 留在中心站,但无权使用. resolveAuthSession 通过返回拒绝登录( 如用户不在允许列表中) { denied: true },以及 authorize 返回时拒绝登录用户 false。 。 。 . authorize 运行每个认证的请求, 并在登录中运行 财务报告和审定财务报表 /sso 在JWT被铸造之前的路线。 无论哪种方式,JWT都没有存储在 会话( 任何现有的会话都被清除), 因此无法到达任何会话, 而用户是 重定向到 notAuthorisedPath拒绝 登录被存储为标记的会话 refused,每个后来认证 请求,包括登录路径,发送到 notAuthorisedPath 无 重新运行中枢的检查,直到用户通过正常程序签名 POST /signout 流动。 身份提供者没有参与拒绝,所以没有 日志出后重定向 URI 需要它 . notAuthorisedPath 一定是个中枢 路径开始于 /和旧的 accessDeniedPath 选项被拒绝.

默认 notAuthorisedPath 实值 /auth/not-authorised,在此注册 插件为 auth: try: 它使 error/not-authorised 视图(来自 @defra/lis-infra-ui-services与403和 pageTitle外加一个 signOutHref 联 合 国 /signout 登记访问者或 signInHref 会 议 日 程 和 议 程 任何人的第一个登录路径。 一个设置自己的中心 notAuthorisedPath 登记该路径本身,并应这样做。 发言级别 403和 记录级404不受影响.

测试路线

路由测试不需要 cookie 或服务符; 注入证书 :

await server.inject({
  url: '/',
  auth: {
    strategy: SPOKE_AUTH_STRATEGY,
    credentials: { user, caller }
  }
})

包裹检查中心的事实与 @defra/lis-hubs-infra-registry它不实行枢纽政策.

当一个枢机在用户上签字时,它会将提供者角色翻译为LIS角色. 此软件包转动 这些角色进入权限.

准入决定如何运作

  • 角色定义 src/authorization/roles/roles.json 和源绘图 src/authorization/roles/role-mappings.json
  • 权限来自翻译的LIS角色,不可信于身份 供应商
  • 集成器和集成器对应用JWT具有LIS作用和一个授权模型版本, 但不携带扩展权限或持有量
  • 应用程序将本地权限从之前的版本角色定义中补水 评价 hasPermission 或者说 demandPermission
  • 允许补水时,CPH范围的角色分配范围保持不变
  • lis-perm-front-office 财务报告和审定财务报表 lis-perm-back-office 进入相应枢纽的大门
  • 物种权限,例如 lis-perm-cattle-read 适用于该物种
  • 应用程序权限, 例如 lis-perm-cattle-register-admin 适用于特定物种应用程序
  • status 财务报告和审定财务报表 home 在物种上发现的最佳许可
  • 后台许可管理模块可建模为 type 并解锁 lis-perm-user-read, (中文(简体) ), lis-perm-user-write,或 lis-perm-user-admin

环境变量

createSpokeAuth 读这些。 CDP平台设置. 在Lis-dev中,由作曲文件设置.

变量用于
CDP_JWT_ISSUER预期的代号签发人
CDP_JWT_JWKS_URI在哪里获取验证服务标志签名的密钥

先决条件

  • 节点.js 24(见 .nvmrc,使用时 nvm use(中文(简体) )
  • 对照一个消费的应用程序检查更改: 净值 一次性设置完成

设置

发展

nvm use
npm install

测试

无法安装工具 npm install测试 维特。 。 。 .

正在发展中

这是一个库,所以它没有自己的服务器. 尝试改变一个消费应用 没有 发布, 将本地副本链接到 lis- dev 堆栈 :

cd lis-dev
.bin/sideload link hubs/infra-access # every installed copy now points at this repo
.bin/sideload up cattle-home        # optional: run a consumer locally with hot reload
.bin/sideload unlink hubs/infra-access # when done

正在测试

npm test                 # unit tests
npm run test:coverage    # with coverage
npm run lint             # ESLint
npm run format:check     # Prettier

在释放出一个变化之前,还要对连接包进行每个消耗回波的测试.

管道

GitHub 动作中运行的构建、版本和出版(.github/workflows)使用蛋糕脚本(*.cake:

  • 将请求拉到 main: 校验(格式、林特、测试),声纳分析,版本检查
  • 推到一个 feature/ 或者说 hotfix/ 分支: 预发版本和标签
  • 合并到 main: 释放标签,然后发布到 无

版本来自git标签 (SemVer). 合并后, 等待出版工作完成后, 才将套件撞入消耗回购中 .

分支政策

Repo采用干线开发. 分行从 main 并命名分支:

  • feature/LREG-<ticket>-<short-kebab-description>
  • hotfix/LREG-<ticket>-<short-kebab-description>

LREG 必须是大写,因为 GitHub 规则拒绝其他分支名称。 重置为 main 而不是合并 main 进去.

协助这一项目

  • 跟着 Defra软件开发标准。 。 。 .
  • npm install 设置一个承诺前钩子(Husky),运行安全审计,格式检查和lint.
  • 打开拉动请求 main 使用 PR 模板。 CI必须通过而声纳质量门在合并前必须是绿色.
  • 地物分枝会撞倒小版本而热补丁分枝. 虽然包裹在0.x上,但作为小版本对公共API船只的突破性改变,所以在PR中叫出它以便消费者可以更新.

许可证

本资料系根据下列公开政府规定公布:

http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3 互联网档案馆的存檔,存档日期2013-12-21

在使用此信息时, 您的产品和应用程序中引用以下的归属声明 MUST .

载有根据开放政府许可证颁发的公共部门信息v3

关于许可证

开放政府许可证(OGL)由陛下文具办公室(HMSO)的主计长制定,使公共部门的信息提供者能够根据共同开放许可证许可其信息的使用和再使用.

它旨在鼓励自由和灵活地使用和再使用信息,仅附带一些条件.

版本与发布记录

@defra/lis-hubs-infra-access 共发布 115 个版本,首次发布于 2026/08/10;过去 12 个月发布了 115 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.45.8latest2026/11/101 天前
0.45.72026/11/092 天前
0.45.62026/11/092 天前
0.45.52026/11/092 天前
0.45.42026/11/092 天前
0.45.4-lreg-000.alpha.1alpha2026/11/092 天前

关于 @defra/lis-hubs-infra-access 的常见问题

@defra/lis-hubs-infra-access 是什么?

牲畜平台共享枢纽接入和能力分辨率.

如何安装 @defra/lis-hubs-infra-access?

在项目目录运行 npm install @defra/lis-hubs-infra-access,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@hapi/boom(10.0.1)、@defra/lis-hubs-infra-core(>=0.31.0 <1.0.0)、@defra/lis-hubs-infra-registry(>=0.5.0 <1.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@defra/lis-hubs-infra-access 支持 TypeScript 吗?

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

@defra/lis-hubs-infra-access 支持 ESM 还是 CommonJS?

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

@defra/lis-hubs-infra-access 需要什么版本的 Node.js?

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

@defra/lis-hubs-infra-access 可以商用吗?

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

@defra/lis-hubs-infra-access 的下载量有多少?

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

@defra/lis-hubs-infra-access 还在维护吗?

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