将 JMX 与 Jaas 一起用于 jconsole 身份验证

Using JMX with Jaas for jconsole authentication

我有以下场景:

我有一个使用 JMX 公开某些方法的应用程序,位于服务器上。目前用户可以使用 jconsole 通过命令行连接到它。目前没有访问限制。

用户将登录到一台机器并具有以活动目录形式存储的访问权限。

我希望向 jmx 进程添加身份验证和授权,以便当用户在命令行中键入时:

jconsole <processName>

它将检查他们的 AD 用户组并确定他们是否有权读取或读写托管资源。

我有一个检索 AD 组的解决方案,但不是我如何将它传递给 JMX 进程。我可以在 jmx 进程上设置一个硬编码的密码文件,但我无法自动调用用户来确定他们的访问权限。

当前的 JMX 进程是否可以在用户尝试连接时执行回调以确定给定用户的访问权限?如果没有,是否存在允许我执行此操作的现有工具和框架(例如 JBoss)?

这可以通过使用 Jaas 自定义登录模块解决,然后在命令行中使用以下命令弹跳并重新启动 JMX 进程:

-Dcom.sun.management.jmxremote.login.config=Sample
-Djava.security.auth.login.config=sample_jaas.config

其中 sample_jaas.config 有这样的设置:

Sample {
   sample.module.SampleLoginModule required;
};

而我的 SampleLoginModule 实现了 LoginModule 接口,并且在其 login() 方法中具有对授权逻辑模块的回调。