验证故障排除
身份验证很棘手,并不总能按预期运行。 下面是 设置身份验证时可能遇到的一些常见问题,以及一些一般的故障排除技巧。
登录失败,显示"......提供商未配置为支持登录"。
如果您尝试使用未配置为允许登录的身份验证提供程序登录,就会出现这种情况。 请参阅登录身份和解析器页面,了解如何配置和自定义登录。
作为 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.experimentalExtraAllowedOrigins
key 接受一系列 origin glob 模式,允许从这些模式登录。
登录失败,错误信息是 "未找到用户"。
许多内置登录解析器都要求用户实体存在于目录中。 如果身份验证成功,但目录中没有匹配的用户实体,就会出现此错误。 如果想在目录数据中不显 示用户的情况下启用登录,请参阅目录数据中记录的方法。登录解析器文档.
如果要自定义此错误信息,可以创建自定义登录解析器并捕捉NotFoundError
抛出ctx.signInWithCatalogUser
或ctx.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]);