ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Backstage 登录实战指南:基于 GitHub OAuth 完成实例登录、验证与故障排查

Backstage 登录实战指南:基于 GitHub OAuth 完成实例登录、验证与故障排查 Backstage 登录实战指南基于 GitHub OAuth 完成实例登录、验证与故障排查【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage本文是 Backstage 快速上手系列Golden Path中登录你的实例004 - Logging into your instance的完整技术指南。它面向开发者与管理员既是一份 Backstage 认证系统的入门教程也是一份登录过程中遇到问题时的排错手册。读完本文你将掌握如何启动 Backstage 并以 GitHub 作为身份提供方Identity Provider完成登录、如何确认登录身份已正确生效以及当遇到 Failed to sign-in, unable to resolve user identity 等常见错误时如何结合配置与源码定位并修复问题。一、前置条件完成 GitHub OAuth App 配置在开始登录之前请确认你已经完成了 GitHub OAuth 应用的创建与配置。完整步骤见 authentication 教程这里简要回顾与本篇登录流程直接相关的两个关键配置项Homepage URL指向 Backstage 前端在本地开发环境下为http://localhost:3000。Authorization callback URL指向 auth 后端通常为http://localhost:7007/api/auth/github/handler/frame。将 GitHub 上生成的Client ID与Client Secret写入项目根目录的app-config.yaml中auth: environment: development providers: # See https://backstage.io/docs/auth/guest/provider guest: {} github: development: clientId: YOUR CLIENT ID clientSecret: YOUR CLIENT SECRET说明environment: development表示该配置块只在开发环境生效仓库自带的 app-config.yaml 中GitHub provider 使用${AUTH_GITHUB_CLIENT_ID}、${AUTH_GITHUB_CLIENT_SECRET}环境变量占位并预留了enterpriseInstanceUrl供 GitHub Enterprise 场景使用可直接参照。二、启动 Backstage 并登录在 Backstage 项目根目录执行yarn start随后在浏览器中访问http://localhost:3000如果你尚未登录会看到上图中的登录界面选择GitHubprovider点击Sign in按钮。浏览器将跳转到 GitHub 的 OAuth 授权页面请核对该页面展示的 scope权限范围与你之前在 GitHub OAuth 应用中配置的一致点击Confirm后即被带回 Backstage 界面此时你已登录成功。如果你已经登录过浏览器会自动进入你的 Backstage 实例无需重复登录。提示本地启动时前端偶尔会比后端先就绪导致登录页出现瞬时错误。等待后端启动完成后再刷新一次页面即可继续。登录流程的实际链路是前端点击 Sign in → 跳转 GitHub OAuth 授权 → GitHub 回调 auth 后端/api/auth/github/handler/frame→ auth 后端完成身份解析并签发 Backstage 用户令牌 → 前端携带令牌进入实例。前端侧githubAuthApiRef的定义位于 packages/core-plugin-api/src/apis/definitions/auth.ts是整个登录 API 的引用入口。三、验证你已成功登录登录成功后点击左侧导航栏中的Settings条目进入个人设置页面查看你的 Profile如果这里显示了来自 GitHub 的头像和用户名恭喜你GitHub 认证集成已经配置成功。如果看不到头像和用户名请回到 authentication 教程逐项核对配置尤其是 OAuth 应用的回调地址与app-config.yaml中的clientId/clientSecret是否一致。四、登录背后的机制Sign-in Resolver 与用户身份能弹出登录框与能成功登录是两件事。默认情况下Backstage 的每个 auth provider 仅用于访问委托access delegation即代表用户向外部系统请求资源例如在 CI 中触发构建。要让用户真正登录进 Backstage必须为 provider 显式配置sign-in resolver告诉系统如何把 GitHub 上的外部身份映射为 Backstage 内部的用户身份。这部分机制的完整说明见 Sign-in Identities and Resolvers。在app-config.yaml中为 GitHub provider 追加 resolverauth: environment: development providers: guest: {} github: development: clientId: YOUR CLIENT ID clientSecret: YOUR CLIENT SECRET signIn: resolvers: # Matches the GitHub username with the Backstage user entity name. - resolver: usernameMatchingUserEntityNameusernameMatchingUserEntityName的含义取 GitHub 返回的用户名与 Catalog 中kind: User实体metadata.name做匹配。若 Catalog 中找不到对应 User 实体登录会失败并提示 Failed to sign-in, unable to resolve user identity。除该 resolver 外GitHub provider 还内置了以下可选 resolver详见 GitHub 认证 provider 文档Resolver匹配逻辑emailMatchingUserEntityProfileEmail用 GitHub 邮箱匹配 User 实体的spec.profile.emailemailLocalPartMatchingUserEntityName用邮箱 前的本地部分匹配 User 实体的nameusernameMatchingUserEntityName用 GitHub 用户名匹配 User 实体的nameuserIdMatchingUserEntityAnnotation用 GitHub 用户 ID 匹配 User 实体的github.com/user-id注解注意resolvers 按顺序尝试只有抛出NotFoundError时才会跳过尝试下一个生产环境通常只配置一个 sign-in resolver避免身份映射歧义带来的账户风险。登录成功后Backstage 会生成一个 JWT 格式的用户令牌用户实体引用写入subclaim所有权引用ownership references在新后端系统中通过 auth 后端的 user info API 对外提供。用户身份由用户实体引用 一组所有权引用构成例如用户user:default/jane可能声明拥有group:default/team-a、group:default/admins那么任何标记为被这些实体拥有的资源都会被判定为属于 Jane。如果内置 resolver 不满足需求你还可以通过createBackendModulecreateOAuthProviderFactory编写自定义 sign-in resolver在packages/backend/src/index.ts中注册或者使用dangerouslyAllowSignInWithoutUserInCatalog: true跳过 Catalog 用户校验存在安全风险生产环境慎用。详见 identity-resolver 文档。五、常见登录失败与排错5.1 The GitHub provider is not configured to support sign-in该错误表示 GitHub provider 尚未启用 sign-in 能力常见原因有两个未配置signIn.resolvers按上一节在 provider 配置中补上signIn.resolvers即可。配置语法错误运行yarn backstage-cli config:check --strict可帮助定位配置语法问题。5.2 Failed to sign-in, unable to resolve user identity该错误表示你配置的 sign-in resolver 在 Catalog 中找不到匹配的 User 实体。解决办法是从组织的权威数据源导入 User、Group 数据可选方案包括使用现成的组织实体 Provider例如 GitHub Org、Entra ID (Azure AD/MS Graph)、GitLab Org 等或编写自定义 Entity Provider。快速演示场景下可以直接在新建 Backstage 实例自带的examples/org.yaml中追加一个 User 实体--- apiVersion: backstage.io/v1alpha1 kind: User metadata: name: YOUR GITHUB USERNAME spec: memberOf: [guests]将YOUR GITHUB USERNAME替换为你的真实 GitHub 用户名。随后在终端用CtrlC停止 Backstage再执行yarn start重启即可重新登录并看到 Catalog 中的内容。5.3 默认的 guest resolver 说明新创建的 Backstage 应用默认带有 guest Sign In Resolver它让所有用户共享同一个 guest 身份仅用于快速起步的本地测试不适合生产环境guest provider 在生产环境中也会拒绝工作。在搭建正式实例时尽早切换到生产可用的 auth provider 并配置对应的 sign-in resolver 是推荐做法见 identity-resolver 快速开始。六、登录之后让实例真正可用登录只是开始。为了让 GitHub 集成发挥完整作用例如从 GitHub 加载 Catalog 实体、配合 Scaffolder 创建工作流通常还需要在app-config.local.yaml该文件被.gitignore排除避免误提交密钥中配置 GitHub Integrationintegrations: github: - host: github.com token: ghp_urtokendeinfewinfwebfweb # 这是来自 GitHub 的 token更安全的做法是把 token 放入环境变量GITHUB_TOKEN后引用integrations: github: - host: github.com token: ${GITHUB_TOKEN} # 使用环境变量 GITHUB_TOKEN注意修改 integration 配置后后端通常需要重启才能生效——在终端用CtrlC停止再执行yarn start重启然后重试相关操作。修改配置项会改变app-config.yaml中auth.providers.github的解析结果并直接影响后端 auth 插件的 provider 注册行为因此任何配置变更后都应重启后端验证。七、进一步阅读Backstage 中的认证总览Sign-in Identities and ResolversGitHub 认证 Provider 文档使用来自 GitHub 的组织数据Backstage 静态配置说明【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表