当前位置: 首页 > 知识库问答 >
问题:

JMX身份验证-基于角色的MBean操作

徐知
2023-03-14

我已经通过 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;
}

然后我创建了一个访问文件,jmxacess。属性,包含

adminuser readwrite
basicuser readonly

和< code > JMX . management . properties ,其中包含< code > com . sun . management . JMX remote . ACCESS . FILE =访问文件的路径,我使用< code >-DCOM . sun . management . config . FILE = JMX . management . properties的路径运行该应用程序。

但是,当我通过JConsol连接并作为basicuser(只读访问)进行身份验证时,我可以访问bean上的setter。我通过完整的服务进行连接:jmx: rmi:…url。

所以我的问题是

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

谢谢

Edit My MBean只是一个基本的POJO,其中包含具有公共getter和setter以及另一个公共方法的私有字段。

共有1个答案

宗政招
2023-03-14

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

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中检索主体后,我可以通过<code>instanceof</code>检查类型,并允许操作继续或抛出<code>SecurityException</code>。

 类似资料:
  • 我正在尝试在 Swift 中创建一个 iOS 应用程序,该应用程序使用 AWS Lambda 使用以下身份验证服务 - https://github.com/danilop/LambdAuth 它使用适用于 iOS 的 AWS 移动开发工具包与迪纳摩数据库和 Lambda 进行通信 - http://docs.aws.amazon.com/mobile/sdkforios/developergui

  • 我试图为AWS实现“开发人员身份验证身份”,如下所示:https://AWS.amazon.com/blogs/mobile/amazon-cognito-innecling-developer-authenticated-identities/ 我很好地理解了基本流程。 我怎样才能做到这一点?

  • 所以我正忙着为twitter开发一个应用程序,我希望人们使用PIN进行身份验证。(https://dev.twitter.com/oauth/pin-based). 要向人们显示PIN码,我需要使用以下命令:https://dev.twitter.com/oauth/reference/get/oauth/authorize 那里的例子说:https://api.twitter.com/oauth

  • **有人可以建议我另一个解决方案,或者我如何可以解决这个问题please.and感谢提前主计长 服务 网络安全配置 错误**说明: com中的Field authenticationManager。实例演示。服务JwtService需要“org”类型的bean。springframework。安全认证。找不到AuthenticationManager。 注入点有以下注释:-@org。springf

  • 问题内容: 我有一个REST API,我正在使用Spring Security基本授权进行身份验证,客户端会为每个请求发送用户名和密码。现在,我想实现基于令牌的身份验证,当用户最初通过身份验证时,我将在响应标头中发送令牌。对于进一步的请求,客户端可以在令牌中包含该令牌,该令牌将用于对资源进行用户身份验证。我有两个身份验证提供程序tokenAuthenticationProvider和daoAuth

  • 在daoAuthenticationProvider中,我设置了自定义userDetailsService并通过从数据库中获取用户登录详细信息对其进行身份验证(只要使用授权传递用户名和密码就可以正常工作:basic bgllqxbpvxnlcjogn21wxidmqjrdturtr04pag==作为头) 但是当我使用X-AUTH-TOKEN(即constants.auth_header_name)