OAuth 2.0 故障排除
概述
本指南涵盖使用 OAuth 2.0 和 管理插件 时遇到的最常见错误,以及如何诊断这些错误。
在管理 UI 中排除 OAuth 2.0 故障
OpenId Discovery 端点不可达
重现步骤
在浏览器中打开管理 UI 的根 URL。您不会看到“单击此处登录”按钮,而是看到以下错误消息
OAuth resource [rabbitmq] not available. OpenId Discovery endpoint https://<the_issuer_url>/.well-known/openid-configuration not reachable
故障排除
以下是导致此问题最常见的原因
- 端点不可达,例如,存在阻止访问的防火墙或目标服务已关闭
- 端点具有 浏览器不信任的 TLS 证书
- 浏览器由于 CORS 策略而阻止访问
识别根本原因的最快方法是打开浏览器的 JavaScript 控制台并搜索 net::ERR_
。最可能的错误是
net::ERR_CONNECTION_REFUSED
:端点已关闭或不可达net::ERR_CERT_AUTHORITY_INVALID
:端点的 TLS 证书未被浏览器信任。要信任此证书,请单击错误消息中的 URL 并按照提示操作
如果没有任何错误与 net::ERR
相匹配,请搜索 CORS
。如果存在类似于以下错误
Access to fetch at 'https://<the_issuer_url>>/.well-known/openid-configuration' from origin
'<rabbitmq_url_to_management_ui>' has been blocked by CORS policy
则浏览器将阻止端点返回的响应,因此不会将其传递到管理 UI。这是由于 CORS 策略。请让身份提供商管理员将管理 UI 的 URL 添加到允许的来源列表中。
OpenId Discovery 端点不符合标准
重现步骤
在浏览器中打开管理 UI 的根 URL。您不会看到“单击此处登录”按钮,而是看到以下错误消息
OAuth resource [rabbitmq] not available. OpenId Discovery endpoint https://<the_issuer_url>/.well-known/openid-configuration not compliant
故障排除
当端点没有返回与 OpenId Connect Discovery 配置 匹配的 JSON 负载时,就会出现此问题。以下是可能的原因
- 端点返回的负载不符合标准,因为它为空或缺少一些关键信息。要识别根本原因,请打开浏览器的 JavaScript 控制台并搜索以下可能的错误消息之一
负载不包含 Openid 配置
当负载为空或不是 JSON 负载时,会出现此错误。缺少 authorization_endpoint
当 JSON 属性authorization_endpoint
缺失时,会出现此错误。缺少 token_endpoint
当 JSON 属性token_endpoint
缺失时,会出现此错误。缺少 jwks_uri
当 JSON 属性jwks_uri
缺失时,会出现此错误。
- URL 错误。从您的身份提供商管理员处获取指向 OpenId Connect Discovery 端点的正确 URL。
未授权
重现步骤
在浏览器中打开管理 UI 的根 URL。单击“单击此处登录”按钮并输入身份提供商请求的凭据。
您将被重定向回管理 UI,并显示以下错误
Not authorized
故障排除
当令牌没有足够的范围或权限来访问管理 UI 时,就会出现此问题。您至少需要以下范围之一,或者等效范围
rabbitmq.tag:administrator
.rabbitmq.tag:management
.rabbitmq.tag:monitoring
.rabbitmq.tag:policymaker
.
请按照以下步骤找出令牌中包含哪些范围或权限
- 打开您的浏览器开发者工具(例如,在 Chrome 或 Firefox 中,右键单击页面并单击“检查”菜单选项)
- 转到“应用程序”选项卡
- 在左侧面板中选择“存储”>“本地存储”选项
- 单击与管理 UI 的 URL 相匹配的树选项
- 在右侧面板中选择“Key” rabbitmq.credentials
- 复制其值
- 导航到 https://jwt.node.org.cn
- 将值粘贴到“已编码”文本字段中
- 查看负载的“已解码”文本字段
- 在令牌的负载中搜索令牌属性
scope
,或者搜索在auth_oauth2.additional_scopes_key
中配置的值(如果有) - 找到合适的令牌范围属性后,在属性值中找到上述任何范围。如果使用 auth_oauth2.scope_prefix,则必须将其考虑在内:范围将被命名为
myprefix_tag:administrator
。如果使用 范围别名,请找到映射到上述范围之一的范围别名
OpenId Discovery 端点由于证书错误而不可达
此问题不一定是管理 UI 特有的,它也可能在应用程序通过其中一个消息传递协议进行身份验证时发生。当 RabbitMQ 必须通过在 auth_oauth2.issuer
中配置的 URL 下载 OpenId Connect 配置,并且发行者使用的证书使用通配符证书时,就会发生这种情况。这意味着证书的 CN 属性与发行者的域名不完全匹配。这在 SaaS 部署中非常常见。
重现步骤
- 在浏览器中打开管理 UI 的根 URL。
- 单击“单击此处登录”。
- 输入您的凭据。
- 您将被重定向回 RabbitMQ,但会显示错误“未授权”。
故障排除
- 访问 RabbitMQ 日志
- 查找
{bad_cert,hostname_check_failed}
- 如果您找到条目,则表示 RabbitMQ 尝试联系在
auth_oauth2.issuer
中找到的 URL,并且发行者提供了一个通配符证书 - 要解决此问题,请将以下行添加到
rabbitmq.conf
中:auth_oauth2.https.hostname_verification = wildcard
,或者如果使用多个身份提供商,请添加auth_oauth2.oauth_providers.<my_oauth_provider_name>.https.hostname_verification = wildcard