Skip to main content

验证故障排除

身份验证很棘手,并不总能按预期运行。 下面是设置身份验证时可能遇到的一些常见问题,以及一些一般的故障排除技巧。

登录失败,显示"......提供商未配置为支持登录"。

如果您尝试使用未配置为允许登录的身份验证提供程序登录,就会出现这种情况。 请参阅登录身份和解析器页面,了解如何配置和自定义登录。

作为 Backstage 1.1 版本的一部分,我们删除了所有登录解析器的默认实现。 这是一项必要的安全修复措施,也是使登录过程的配置更加清晰的一步。 如果您是从以前的版本升级,可能会遇到此错误,在这种情况下,您需要按照上述方法配置登录解析器。

验证失败,显示 "为...注册的验证提供程序配置错误"。

这种情况通常只会在开发过程中发生,因为在生产构建过程中,如果提供程序配置错误,验证后端将完全无法启动。

仔细检查提供程序的配置是否正确。 请注意,环境变量如AUTH_OAUTH2_CLIENT_ID必须设置,并将.env您可以使用yarn backstage-cli config:print --lax命令来打印本地配置。

后端日志还应能让人了解提供程序配置失败的原因。 在正常设置中,后端日志应类似于以下内容"Configuring provider, oauth2"否则,它会记录一个警告,如"Skipping oauth2 auth provider, ...".

验证失败,显示 "登录失败;由 NotAllowedError 引起:不允许使用 Origin '...'"

如果配置的原点是app.baseUrl与访问前端的来源不匹配。 请确保app.baseUrl与用户在浏览器地址栏中看到的内容相匹配。

如果您希望同时支持多个不同的起源,有一种试验性配置可以让您做到这一点。auth.experimentalExtraAllowedOriginskey 接受一系列 origin glob 模式,允许从这些模式登录。

登录失败,错误信息是 "未找到用户"。

许多内置登录解析器都要求用户实体存在于目录中。 如果身份验证成功,但目录中没有匹配的用户实体,就会出现此错误。 如果想在目录数据中不显示用户的情况下启用登录,请参阅目录数据中记录的方法。登录解析器文档.

如果要自定义此错误信息,可以创建自定义登录解析器并捕捉NotFoundError抛出ctx.signInWithCatalogUserctx.findCatalogUser.

一般故障排除

本节包含一些一般故障排除提示。

手动通过身份验证

身份验证在弹出窗口中进行,该窗口会重定向到身份提供商的授权端点。 身份验证完成后,身份提供商会重定向回身份验证后端,该后端会立即提供一个简单的 HTML 页面,将结果发布回主窗口,然后关闭弹出窗口。

由于弹出窗口是自动关闭的,因此有时很难检查验证流程,特别是如果想要调试正在设置的 cookie。 解决这个问题的方法之一是手动前往/start的端点,也就是弹出窗口最初指向的页面。 例如,如果您想在本地对 GitHub auth 进行故障诊断,您可以前往http://localhost:7007/api/auth/github/start?env=development请注意env参数,可能还需要设置scope参数。

一旦您通过了授权流程,您应该在/handler/frame端点,它将显示一个空页面。 这通常是将结果传回主窗口的地方,但由于我们是通过手动流程实现的,因此不会出现这种情况。 不过,您仍然可以通过查看页面源代码或打印authResponse变量。

检查刷新调用

如果会话持久性出现问题,例如用户在重新加载页面时被注销,那么调用/refresh前往网络检查器,按照以下条件进行筛选/refresh查找GET请求<backend.baseUrl>/api/auth/<provider>/refresh并检查请求。

请注意,前端可能会对刷新端点进行额外调用,以检查身份验证提供程序是否有现有会话。 这意味着可能会有多个调用,包括一些失败的调用。 请确保您正在查看的是对您正在排除故障的提供程序的刷新调用,而不用担心其他失败的刷新调用。

检查Backstage令牌的内容

登录时发出的 Backstage 令牌是一个普通的 JWT。 您可以使用任何支持 JWT 的工具检查其内容,也可以在浏览器控制台或 Node.js REPL 中自行解析有效载荷:

atob(token.split('.')[1]);