OpenDaylight调用Jolokia接口返回401未授权,求解决方案
问题描述
我在多种环境(Windows上的VirtualBox 7.0虚拟机、原生Ubuntu 24.04、Ubuntu虚拟机、基于Ubuntu的Docker)中部署OpenDaylight后,执行以下curl命令:
$curl -u admin:admin -X GET http://172.17.0.2:8181/jolokia/read/org.opendaylight.controller:type=DistributedConfigDatastore,Category=ShardManager,name=shard-manager-config
均返回401未授权错误,错误内容如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/> <title>Error 401 Unauthorized</title> </head> <body><h2>HTTP ERROR 401 Unauthorized</h2> <table> <tr><th>URI:</th><td>/jolokia/read/org.opendaylight.controller:type=DistributedConfigDatastore,Category=ShardManager,name=shard-manager-config</td></tr> <tr><th>STATUS:</th><td>401</td></tr> <tr><th>MESSAGE:</th><td>Unauthorized</td></tr> <tr><th>SERVLET:</th><td>org.jolokia.osgi.servlet.JolokiaServlet</td></tr> </table> </body> </html>
尝试用sudo执行命令也无法解决,查询后未找到其他默认凭据,求解决建议。
解决建议
检查OpenDaylight身份验证配置
打开OpenDaylight安装目录下的etc/org.apache.karaf.jaas.cfg文件,确认admin用户的密码配置是否正确。如果是自定义部署场景,默认凭据可能已被修改,需核对配置内的用户信息。验证Jolokia访问权限设置
查看etc/org.jolokia.osgi.cfg配置文件,确认是否启用了严格权限控制。若配置了policyLocation指向权限策略文件,需检查策略是否允许admin用户访问目标MBean路径。若权限受限,调整策略规则添加对应MBean的访问权限。确认OpenDaylight启动特性
部署时需确保已加载包含Jolokia和Datastore管理的特性集。进入Karaf控制台执行feature:list查看已安装特性,若缺失odl-mdsal-all、odl-jolokia等特性,执行feature:install odl-jolokia odl-mdsal-all补充安装。排查网络与端口映射问题
Docker环境中,确认容器8181端口已正确映射到宿主机,或直接在容器内部执行curl测试,排除端口映射或网络访问异常。同时确认目标IP172.17.0.2为OpenDaylight服务的正确地址(如容器内部IP或宿主机映射IP)。尝试Digest认证方式
部分OpenDaylight版本中,Jolokia可能要求使用Digest认证而非Basic认证,修改curl命令如下:curl --digest -u admin:admin -X GET http://172.17.0.2:8181/jolokia/read/org.opendaylight.controller:type=DistributedConfigDatastore,Category=ShardManager,name=shard-manager-config重置默认凭据
若确认默认凭据已被修改,可进入OpenDaylight的Karaf控制台重置admin密码:jaas:manage jaas:useradmin <new-password> jaas:update重启OpenDaylight服务后,使用新密码执行curl命令尝试。
内容的提问来源于stack exchange,提问作者Shagysaurio

