Backstage v1.2.0 发布要点解析:TechDocs 插件化、Kubernetes OIDC 认证与安全性升级
【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage
本篇文章基于当前仓库中收录的官方发布说明(docs/releases/v1.2.0.md),系统梳理 Backstage v1.2.0 的核心亮点:TechDocs Addon 框架正式 GA、三大新插件(ADR、CodeScene、Gerrit 目录集成)、Kubernetes 新增 OIDC 认证方式,以及 ServerTokenManager 服务间认证令牌的安全增强。读完本文,你将掌握本次版本升级的完整内容清单、关键配置项的写法,以及部分功能在当前仓库源码中的落地实现。
版本概览
Backstage v1.2.0 是该项目在 2022 年 8 月左右发布的一个里程碑式版本。除了常规的缺陷修复与依赖升级之外,这一版本呈现出几个显著特征:
- TechDocs 文档中心的插件化体系走向成熟,Addon 框架正式宣布 GA(General Availability);
- 生态集成进一步扩张,新增 ADR、CodeScene 两个前端插件,以及 Gerrit 目录后端模块;
- 安全基线被提高,服务间认证令牌(ServerTokenManager 签发的 token)开始携带过期时间;
- Kubernetes 插件迎来新的认证提供方,支持直接使用用户已登录的 OIDC ID Token 访问集群。
下文将按发布说明的章节逐一展开,并结合当前仓库源码给出可验证的实现细节。
TechDocs:Addon 框架正式 GA
TechDocs 是 Backstage 内置的文档中心能力,负责将 Markdown 技术文档渲染并发布到开发者门户中。在 v1.2.0 中,TechDocs Addon 框架(Addon Framework)正式宣布一般可用(GA),这意味着第三方开发者可以基于稳定的公开 API 来定制文档阅读视图,例如在文档页面中嵌入自定义页脚、搜索高亮、评论组件等。
Addon 框架的本质是让 TechDocs 阅读页面变成可组合的:文档内容在渲染时,会经过一组已注册的 Addon 组件处理,从而在不修改 TechDocs 核心代码的前提下扩展界面与交互。对于希望定制自身文档门户的团队,这一能力的 GA 意味着可以放心将 Addon 机制引入生产环境。
从当前仓库看,TechDocs 插件主体位于 plugins/techdocs,其配套的前端 React 工具库 plugins/techdocs-react 与贡献型 Addon 集合 plugins/techdocs-module-addons-contrib 均已被收录,后者为开箱即用的 Addon 扩展提供了参考实现,可作为自定义 Addon 的起点。
新增插件一:ADR 插件
v1.2.0 引入了@backstage/plugin-adr,用于在 Backstage 内部直接跟踪、浏览团队的架构决策记录(Architecture Decision Records)。ADR 是一类用轻量文档记录架构决策及其背景、权衡的实践,Backstage 仓库自身也维护着 docs/architecture-decisions 目录(如adr001-add-adr-log.md、adr009-entity-references.md等),两者是同一实践在不同场景下的体现。
该插件由社区成员 @kuangp 贡献,其核心价值在于把散落在代码仓库中的adr/*.md文档聚合进开发者门户,让团队在统一的界面上按实体、按目录检索和阅读架构决策,无需切换到 Git 平台。
新增插件二:CodeScene 插件
CodeScene 插件为 Backstage 提供了一个页面组件,用于列出 CodeScene 实例上已有的项目及其分析数据。CodeScene 是面向软件交付的代码分析平台,能够输出复杂度、技术债、交付风险等指标。集成后,开发者可以在 Backstage 的门户内直接查看这些分析结果,把代码质量数据纳入日常研发流程。
该插件由社区成员 @julioz 贡献(对应 PR #10777)。它属于典型的"外部工具聚合"型插件:Backstage 作为门户层,通过插件对接第三方分析系统,将外部数据以标准化的实体/页面形式呈现给用户。
新增插件三:Gerrit 目录集成模块
plugin-catalog-backend-module-gerrit的加入,使Gerrit成为 Backstage Catalog 的又一代码托管后端数据源。该模块由社区成员 @anicke 贡献(对应 PR #10669),支持两类能力:
- Gerrit 发现(discovery):自动发现 Gerrit 仓库,并将其注册为 Catalog 中的组件实体;
- Gerrit 位置(locations):将 Gerrit 仓库中的
catalog-info.yaml等配置文件作为 Catalog 的位置来源进行加载。
当前仓库中该模块位于 plugins/catalog-backend-module-gerrit,仓库根目录的catalog-info.yaml正是被此类位置加载器消费的实体描述文件。对于使用 Gerrit 作为主要代码托管平台的团队,这是把已有代码资产纳入统一软件目录的关键入口。
集成层调整:Bitbucket Server 与 Bitbucket Cloud 拆分
v1.2.0 在集成层做了一个重要的内部重构:将 Bitbucket Server 与 Bitbucket Cloud 在实现上拆分。原因在于两者的功能集存在细微差异(例如 API 形态、权限模型、支持的 Scaffolder 动作不同),混在一起会让配置与行为难以对齐。
此次拆分同时带来两个配套变化,以便平滑迁移:
- 新增了面向各自平台的 Scaffolder 动作;
- 新增了独立的 integrations 配置项。
这一改动的影响面主要在两类用户:
- 同时对接 Bitbucket Server(自托管)与 Bitbucket Cloud(SaaS)的团队,现在可以为不同平台配置不同的集成参数与动作;
- 原本使用统一 Bitbucket 配置的存量用户,需要按新配置结构进行渐进式迁移,发布说明明确这是"gradual migration",并非一刀切。
从当前仓库看,这一拆分后的形态体现在 plugins/scaffolder-backend-module-bitbucket-cloud 与 plugins/scaffolder-backend-module-bitbucket-server 两个独立模块上,分别承载各自平台的 Scaffolder 动作实现。
安全增强:ServerTokenManager 令牌加入过期时间
改动内容
Backstage 的服务间(server-to-server)认证由 TokenManager 负责签发与校验令牌,v1.2.0 对ServerTokenManager做了两项安全相关变更:
- 签发令牌时写入
exp(过期时间)声明:新签发的令牌有效期被设置为签发时刻之后的一小时(one hour in the future from when issued); - 废弃对无过期时间令牌的容忍:传入或校验"缺少
exp声明"或"exp已过期"的令牌的行为被标记为 deprecated,当前版本会打印警告日志,未来版本将直接报错。
技术影响
在旧版本中,服务间令牌理论上可以永久有效,一旦泄露就难以通过时间维度收敛风险。加入一小时的exp后,令牌的生命周期被收紧,泄露窗口显著缩小。同时,废弃"容忍过期/无过期令牌"的做法,是为了推动全生态统一采用带过期时间的令牌协议,避免旧令牌长期滞留在各服务的缓存或配置中。
对于运行多实例 Backstage 或大量使用后端 API 直连(如插件后端之间的调用)的部署,升级后需要关注两点:
- 各服务实例之间时间需保持基本同步(NTP),否则可能因时钟偏差导致令牌被误判过期;
- 若存在长期缓存令牌的自定义实现,需确保其能处理令牌过期后的自动续签。
当前仓库佐证
该改动对应上游 PR #11262。在当前仓库的代码布局中,后端默认服务包位于 packages/backend-defaults,服务间认证相关的令牌逻辑即在此类后端基础包中实现;升级时若自定义了 TokenManager 的实现,建议对照新版行为重新校验令牌的签发与校验逻辑。
Kubernetes:新增 OIDC 认证提供方
配置方式
v1.2.0 为 Kubernetes 插件新增了oidc认证提供方(auth provider),并配套一个可选的配置项oidcTokenProvider。这一能力使 Backstage 可以使用用户在 Backstage 中登录时获得的 ID Token 来认证 Kubernetes 集群,无需再为集群单独配置服务账号令牌或重复登录。
在集群配置中,启用方式如下(结合 plugins/kubernetes-backend/config.d.ts 中声明的配置结构):
kubernetes: serviceLocatorMethod: type: 'multiTenant' clusterLocatorMethods: - type: 'config' clusters: - url: https://kubernetes.example.com name: example-cluster authProvider: oidc # 使用 OIDC 认证方式 oidcTokenProvider: google # 指定 OIDC token 提供方标识其中:
authProvider: 'oidc'声明该集群使用 OIDC 认证策略;oidcTokenProvider用于指定 ID Token 取自哪一个已配置的 OIDC 认证提供方(例如google),该值在配置结构中被标记为@visibility frontend,属于可下发到前端的配置;- 集群实体的
authMetadata中需要携带对应的 token provider 标识,插件会据此在请求体中查找匹配的 token。
源码级实现
该功能在 plugins/kubernetes-backend/src/auth/OidcStrategy.ts 中实现了AuthenticationStrategy接口。其核心逻辑如下:
validateCluster:校验集群的authMetadata中是否声明了ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER,若为空则返回错误Must specify a token provider for 'oidc' strategy;getCredential:从请求的authConfig.oidc对象中,按oidcTokenProvider指定的键名取出 ID Token,并将其包装为bearer token类型的KubernetesCredential,用于后续对集群 API 的调用。
从调用链上看,认证策略由 plugins/kubernetes-backend/src/service/KubernetesRouter.ts 中的路由层通过authStrategyMap按authProvider值分发,OidcStrategy即注册在oidc这个键名下。同时,plugins/kubernetes-backend/src/auth/OidcStrategy.test.ts 提供了针对该策略的单元测试,覆盖了"缺少 token provider 报错""token 缺失报错""正常返回 bearer token"等分支,可作为理解其行为边界的参考。
使用前提
- 需要在 Backstage 中配置与集群兼容的 OIDC 认证提供方(即用户登录 Backstage 所走的 OIDC 提供方);
- Kubernetes 集群侧需启用与 OIDC 发行方匹配的
--oidc-issuer-url等配置,接受来自该发行方的 ID Token; - 该功能的引入者 @dbravovmw 在 PR #11328 中完成了主要实现。
其他更新:调度器与空状态界面
TaskScheduleDefinition 支持直观时长对象
后端任务调度器(backend task scheduler)的TaskScheduleDefinition在 v1.2.0 中得到了扩展:除原有的 luxonDuration对象外,现在也接受包含days、hours、seconds等字段的普通选项对象。这一改动(PR #11245)意味着在编写周期任务(如 Catalog 的定时刷新、搜索索引的定时重建)时,可以写出更直观的调度描述:
// 此前需要依赖 luxon 构造 Duration // 现在可以直接传入选项对象 { frequency: { hours: 6 }, timeout: { minutes: 30 }, }对于不想在业务代码中引入 luxon 依赖的插件作者来说,这降低了调度任务的书写成本。
实体不存在时渲染自定义组件
另一处前端体验改进是:当实体(Entity)无法被找到时,现在可以渲染自定义组件(PR #11047)。此前找不到实体通常只会显示通用错误页;升级后,门户维护者可以为"实体不存在"场景定制提示信息、推荐链接或替代导航,改善用户在 Catalog 中访问失效实体时的体验。
安全修复
本次发布包含一项安全修复,涉及@backstage/plugin-scaffolder-backend-module-rails(Rails 脚手架后端模块)。发布说明明确建议使用该模块的用户尽快升级到最新版本。该模块在当前仓库中位于 plugins/scaffolder-backend-module-rails,用于在 Scaffolder 模板中生成 Rails 项目骨架。
升级建议与路径
Backstage 官方推荐所有项目跟随最新版本持续升级。升级的通用指引见仓库内的 docs/getting-started/keeping-backstage-updated.md,其中介绍了如何借助 Backstage CLI 与版本策略平滑升级。
结合本次版本特性,升级时可以重点核对以下清单:
- 若使用 ServerTokenManager 签发的服务间令牌,确认各服务能接受带
exp的新令牌,并清理对无过期令牌的依赖; - 若使用 Bitbucket 集成,留意 Server/Cloud 拆分后的配置迁移指引;
- 若使用 Kubernetes 插件,可评估将部分集群切换到
oidc认证方式,以复用 Backstage 已有的 OIDC 登录态; - 若使用了 Rails 脚手架模块,务必更新到修复后的版本。
参考与延伸阅读
- 完整的逐条变更记录见 docs/releases/v1.2.0-changelog.md;
- Backstage 的版本兼容与支持策略见 docs/overview/versioning-policy.md;
- ADR 实践的仓库内部示例可参考 docs/architecture-decisions;
- Kubernetes 插件的 OIDC 认证策略源码见 plugins/kubernetes-backend/src/auth/OidcStrategy.ts,其测试见 plugins/kubernetes-backend/src/auth/OidcStrategy.test.ts。
总而言之,Backstage v1.2.0 是一版"生态扩张 + 安全加固"并重的发布:TechDocs Addon 的 GA 为文档中心打开了定制化空间,三个新插件/模块补齐了 ADR、代码分析与 Gerrit 场景,而令牌过期机制与 Kubernetes OIDC 认证则分别提升了服务间通信安全与集群接入的便捷性。对于正在规划升级的团队,建议按上述清单逐项评估适配影响。
【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考