ActiveMQ Part 5 : 认证与授权

1.  Web 控制台账号配置

     打开文件 config\jetty-realm.properties 

     在如下信息中配置WEB控制台管理员账号、密码(密码长度必须大于等于4位)

1 # Defines users that can access the web (console, demo, etc.)
2 # username: password [,rolename ...]
3 admin: admin123, admins
4 user: user123, users

 

2.  认证与授权 - simpleAuthenticationPlugin

     可以通过简单的配置来实现身份认证和对 Topic(或 Queue)的角色授权;

     身份认证:

 1 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
 2   <plugins>
 3     <simpleAuthenticationPlugin>
 4       <users>
 5         <authenticationUser username="admin" password="admin1pwd" groups="admins"/>
 6         <authenticationUser username="user1" password="user1pwd" groups="users"/>
 7       </users>
 8     </simpleAuthenticationPlugin>
 9   </plugins>
10 </broker>
View Code

     角色授权:

 1 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
 2   <plugins>
 3     <simpleAuthenticationPlugin>
 4       <users>
 5         <authenticationUser username="admin" password="admin1pwd" groups="admins"/>
 6         <authenticationUser username="user1" password="user1pwd" groups="users"/>
 7       </users>
 8     </simpleAuthenticationPlugin>
 9 
10     <authorizationPlugin>
11       <map>
12         <authorizationMap>
13           <authorizationEntries>
14             <authorizationEntry topic=">" read="users" write="users" admin="users, admins"/>
15             
16             <!-- 如果没有配置  topic=">" ,则需要配置以下内容,供监听;
17                 <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests, users" write="guests,users" admin="guests,users"/>
18             -->
19           </authorizationEntries>
20         </authorizationMap>
21       </map>
22     </authorizationPlugin>
23   </plugins>
24 </broker>
View Code

     小技巧: 

     我们客户的一个需求: 所有发布端在发送消息时,允许未携带身份(用户名和密码)发消息(如下代码)

                所有订阅端则必须携带身份(用户名和密码)才能订阅指定的主题消息;

1 // 发布端
2 byte result = Client.Connect("mypubid", null, null, false, 30);
3 
4 // 订阅端
5 byte result = Client.Connect("mysubid", null, null, false, 30);
View Code

     这里相当于要满足匿名用户的访问,5.4版本之后是允许的,但如何区分 匿名用户组 和 自定义用户组呢?

     simpleAuthenticationPlugin 认证提供了一个属性 anonymousAccessAllowed="true",为用户提供匿名访问的机会;

     经过对 simpleAuthenticationPlugin 插件源码分析,其中对名称为: anonymous 的用户组进行了放行;

     于是,我们的配置可以变更为如下,来满足需求;

 1 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
 2   <plugins>
 3     <simpleAuthenticationPlugin anonymousAccessAllowed="true">
 4       <users>
 5         <authenticationUser username="admin" password="admin1pwd" groups="admins"/>
 6         <authenticationUser username="user1" password="user1pwd" groups="users"/>
 7       </users>
 8     </simpleAuthenticationPlugin>
 9 
10     <authorizationPlugin>
11       <map>
12         <authorizationMap>
13           <authorizationEntries>
14             <authorizationEntry topic="TestTopic" read="users, admins" write="anonymous" admin="users, admins"/>
15             <authorizationEntry topic="ActiveMQ.Advisory.>" read="users, admins" write="anonymous, users, admins" admin="anonymous, users, admins"/>
16           </authorizationEntries>
17         </authorizationMap>
18       </map>
19     </authorizationPlugin>
20   </plugins>
21 </broker>
View Code

     当然,这需要在 simpleAuthenticationPlugin 认证的场景下才能满足; 这种方式运维起来也非常不方便,在变更用户、角色、主题及授权策略时,都需要重启服务;

 

3.  认证与授权 - jaasAuthenticationPlugin

     与 simpleAuthenticationPlugin 认证方式不同的是,用户的管理与授权可通过外部文件来配置,并且不需要重启服务;

     配置上涉及以下三个文件:

     A) users.properties : 配置用户

     B) groups.properties:配置用户组

     C) login.config :作为 jassAuthenticationPlugin 桥接 users 和 groups 的配置以及全局认证相关配置信息;

   1) 打开 \Conf\users.properties 文件,配置用户及密码(注意:密码必须大于4位,否则会引发用户名或密码无效的错误)

## username=password
admin=admin
user1=pwd123
user2=pwd123

   2) 打开 \Conf\groups.properties 文件,配置用户所属组织

## groupname=username1,username2
admins=admin,user1
users=user1,user2

   3) 打开 \Conf\login.config 文件,桥接配置文件及全局信息  

      debug=true : 在认证过程发生异常,可以输出详细的异常信息;

      reload=true : 在增加用户(组)或变更用户(组)及密码后,刷新内存配置信息(不需要重启 activemq 服务)

activemq {
    org.apache.activemq.jaas.PropertiesLoginModule required
    debug=true
    reload=true
        org.apache.activemq.jaas.properties.user="users.properties"
        org.apache.activemq.jaas.properties.group="groups.properties";
};

   4) 打开 \Conf\activemq.xml 文件,配置如下:

      连接users和groups的语句为:<jaasAuthenticationPlugin configuration="activemq" />

      其中 "activemq" 对应 login.config 中配置的 activemq { ... } 配置块;

      注意: 此认证方式无法使用 anonymous 身份进行授权;

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
  <plugins>
    <jaasAuthenticationPlugin configuration="activemq" />
    <authorizationPlugin>
      <map>
        <authorizationMap>
          <authorizationEntries>
            <authorizationEntry topic="TestTopic" read="users, admins" write="users, admins" admin="users, admins"/>
            <authorizationEntry topic="ActiveMQ.Advisory.>" read="users, admins" write="users, admins" admin="users, admins"/>
          </authorizationEntries>
        </authorizationMap>
      </map>
    </authorizationPlugin>
  </plugins>
</broker>

 

posted @ 2017-10-31 20:52  SPCop  阅读(1254)  评论(0编辑  收藏  举报