ActiveMQ Part 5 : 認證與受權

1.  Web 控制檯帳號配置html

     打開文件 config\jetty-realm.properties web

     在以下信息中配置WEB控制檯管理員帳號、密碼(密碼長度必須大於等於4位)apache

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)的角色受權;ide

     身份認證:源碼分析

 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

     角色受權:ui

 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

     小技巧: spa

     咱們客戶的一個需求: 全部發布端在發送消息時,容許未攜帶身份(用戶名和密碼)發消息(以下代碼)插件

                全部訂閱端則必須攜帶身份(用戶名和密碼)才能訂閱指定的主題消息;debug

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>
相關文章
相關標籤/搜索