【问题标题】:JMX Authentication - Role Based MBean OperationsJMX 身份验证 - 基于角色的 MBean 操作
【发布时间】:2014-11-28 16:10:47
【问题描述】:

我已经为通过 RMI 的 JMX 身份验证实现了 JMXAuthenticator,但是我不确定如何创建角色以允许只读/读写访问级别。例如,在JMXAuthenticator.authenticate 我有我的自定义身份验证逻辑,并希望它来确定访问角色。我尝试了以下方法,但在 JConsole 中执行操作时没有区别:

@Override
public Subject authenticate(Object credentials) {
    Subject subject = new Subject();
    JMXPrincipal p;

    //...my logic
    String accessLevel = myCustomLogic();
    if (accessLevel.equals("admin")) {
        p = new JMXPrincipal("adminrole");
    } else {
        p = new JMXPrincipal("basicrole");
    }

    subject.getPrincipals().add(p);
    return subject;
}

然后我创建了一个访问文件jmxaccess.properties,其中包含

adminuser readwrite
basicuser readonly

和包含com.sun.management.jmxremote.access.file=PATH TO ACCESS FILEjmx.management.properties,我使用-Dcom.sun.management.config.file=PATH TO jmx.management.properties 运行应用程序。

但是,当我通过 JConsole 连接并以基本用户身份进行身份验证(只读访问)时,我可以访问 bean 上的设置器。我通过完整的service:jmx:rmi:... url 连接。

所以我的问题是

  • 是否需要对我的 bean 中的设置器进行注释/执行任何操作以将它们指定为仅对管理员用户可见?
  • 我是否没有正确构建 JMXAuthenticator 返回的 Subject 对象?
  • 是否缺少任何其他配置/设置?

谢谢

编辑我的 MBean 只是一个基本的 POJO,其私有字段具有公共 getter 和 setter 以及一个其他公共方法。

【问题讨论】:

    标签: java authentication jmx mbeans


    【解决方案1】:

    找到答案:需要通过InvocationHandler 接口实现自定义调用处理程序。这会在服务器调用到达 bean 之前拦截它们。在 authenticate 方法中,您需要检查主体

    AccessControlContext acc = AccessController.getContext();
    Subject subject = Subject.getSubject(acc);
    Set principals = subject.getPrincipals(JMXPrincipal.class);
    if(principals != null && !principals.isEmpty()) {
        Principal principal = (Principal)principals.iterator().next();
        //your checks
    }
    

    我扩展了 JMXPrincipal(每个访问级别一个扩展)并将其分配给上面 Authenticator 中的 Subject,然后在 IH 中检索主体后,我可以通过 instanceof 检查类型并允许操作继续或扔一个SecurityException

    【讨论】:

    • 嗨,你能在 github 或类似的地方分享你的解决方案吗? :)
    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2021-11-22
    • 2019-10-10
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多