访问Wildfly管理控制台时出错-需要验证

时间:2018-09-22 00:34:32

标签: docker nginx wildfly

登录Authentication required后收到错误Wildfly 13 Management Console

如果我输入了错误的用户名或密码,它会再次询问,但是如果我输入正确,它将显示带有错误消息的页面(因此,我认为用户名和密码是正确的,但随后出现其他错误)。

enter image description here

我正在使用docker运行Nginx容器和Wildfly容器。

nginx在端口9991上进行外部侦听,并将代理传递给wildfly容器,但这显示了先前描述的错误。

仅在Wildfly控制台上发生,其他所有请求都被代理,甚至代理到Websocket或端口8080上的Wildfly,都已成功完成

Wildfly容器在端口9990上进行外部侦听,并且我可以在此端口上成功访问控制台。如果在docker上我映射了端口"9992:9990" 我仍然可以通过端口9992成功访问控制台

因此,这似乎与docker没有关系,但与Wildfly Console本身有关。在中间使用反向代理时,可能无法成功进行某种身份验证。

我在https://github.com/lucasbasquerotto/docker-main上有一个演示docker项目,您可以下载标签0.0.6,该标签具有适用于Wildfly 13和nginx的所有设置,并可以模拟此错误。

git clone -b 0.0.6 --single-branch --depth 1 https://github.com/lucasbasquerotto/docker-main.git
cd docker-main
docker-compose up -d

然后,如果您使用用户http://localhost:9990和密码monitorMonitor#70365中直接访问容器,则一切正常

但是如果您使用相同的凭据访问http://localhost:9991,并通过nginx反向代理访问,则会收到错误消息

我的nginx.conf文件:

upstream docker-wildfly {
  server wildfly:9990;
}

location / {
  proxy_pass         http://docker-wildfly;
  proxy_redirect     off;
  proxy_set_header   Host $host;
  proxy_set_header   X-Real-IP $remote_addr;
  proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header   X-Forwarded-Host $server_name;
}

我也尝试过:

proxy_set_header   X-Forwarded-Proto $scheme;

还有 Authorization标头(仅第二行,并且同时包含这两者):

proxy_set_header   Authorization $http_authorization;
proxy_pass_header  Authorization;

并使用端口定义主机头(而不是仅$ host):

proxy_set_header   Host $server_addr:$server_port;

我已经尝试将上述配置隔离并组合在一起。全部无济于事。

有任何建议吗?

是否有人通过反向代理成功访问了Wildfly控制台?

更新(2018-09-22)

Wildfly似乎使用摘要身份验证(而不是基本身份验证)。

我在控制台中看到如下所示的标题:

Authorization: Digest username="monitor", realm="ManagementRealm", nonce="AAAAAQAAAStPzpEGR3LxjJcd+HqIX2eJ+W8JuzRHejXPcGH++43AGWSVYTA=", uri="/console/index.html", algorithm=MD5, response="8d5b2b26adce452555d13598e77c0f63", opaque="00000000000000000000000000000000", qop=auth, nc=00000005, cnonce="fe0e31dd57f83948"

我没有太多关于使用nginx代理带有摘要头的传递请求的文档(但我认为它应该是透明的)。

我在SO中看到的一个问题是https://serverfault.com/questions/750213/http-digest-authentication-on-proxied-server,但到目前为止还没有答案。

我看到有nginx非官方模块https://www.nginx.com/resources/wiki/modules/auth_digest/,但是在github存储库(https://github.com/atomx/nginx-http-auth-digest)中它说:

  

ngx_http_auth_digest模块补充了Nginx的内置Basic   通过提供对RFC 2617摘要的支持的身份验证模块   身份验证。该模块目前可以使用,但仅   由作者测试和审查。鉴于这是安全性   代码,几乎可以肯定,只有一双眼睛无法保证   这是100%正确的。直到出现一些错误报告,并且其中一些   代码中的“未知未知数”已清除,请考虑一下   将一个“ alpha”模块,并用适当数量的   怀疑。

在我看来,对用户进行硬编码并传入要由nginx使用的文件也不是一件好事(在这种情况下,身份验证对于反向代理应该是透明的)。

无论如何,我都尝试过,即使最终目的地没有摘要式身份验证,它也会正确要求我进行身份验证,例如在尝试连接到wildfly站点(而不是控制台)时,它会在尝试连接时询问到nginx(在代理请求之前),然后它成功转发到目的地,除非使用wildfly控制台,它一直要求我永远进行身份验证。

所以我认为这不是解决方案。问题似乎出在nginx传递给Wildfly控制台的内容上。

0 个答案:

没有答案