ActiveMQ中的安全機制 [轉]

來源:互聯網
上載者:User

標籤:

本文簡單介紹ActiveMQ通過JAAS實現的安全機制。
JAAS(Java Authentication and Authorization Service)也就是java認證/授權服務。這是兩種不同的服務,下面對其做一些區別:
驗證(Authentication)就是要驗證一個使用者的有效性,即使用者名稱、密碼是否正確;
授權(Authorization)就是授予使用者某種角色,以使使用者只能訪問具有相應角色的資源。
ActiveMQ中使用JAAS實現訊息安全和控制是通過使用配製檔案來實現的。
首先討論認證服務:
編寫login.config檔案,內容如下
activemq-domain {
    org.apache.activemq.jaas.PropertiesLoginModule required
        debug=true
        org.apache.activemq.jaas.properties.user="users.properties"
        org.apache.activemq.jaas.properties.group="groups.properties";
};
把這個檔案放在CLASSPATH所指路徑下,我選擇放在%ACTIVEMQ_HOME%/conf/下,這樣就不用設定了。然後編寫users.properties和groups.properties檔案,內容可參考下例:
#users.properties
system=manager
user=password
guest=password
#groups.properties
admins=system
users=system,user
guests=guest
內容是顯而易見的,users.properties檔案裡面配製了三個使用者,並分別制定了他們的密碼。groups.properties檔案裡配製了三個組,以及每個組裡面的使用者。這兩個檔案和login.config放在同一個目錄。

接著討論授權服務:
通過修改activemq.xml檔案來增加對不同group中的使用者指定所能進行的操作。

<beans xmlns="http://activemq.org/config/1.0">
  <!-- Allows us to use system properties as variables in this configuration file -->
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
 
  <broker useJmx="true">
    <!-- In ActiveMQ 4, you can setup destination policies --> 
    <destinationPolicy>
      <policyMap><policyEntries>
       
          <policyEntry topic="FOO.>">
            <dispatchPolicy>
              <strictOrderDispatchPolicy />
            </dispatchPolicy>
            <subscriptionRecoveryPolicy>
              <lastImageSubscriptionRecoveryPolicy />
            </subscriptionRecoveryPolicy>
          </policyEntry>
      </policyEntries></policyMap>
    </destinationPolicy>
 
 
    <persistenceAdapter>
        <journaledJDBC journalLogFiles="5" dataDirectory="${activemq.home}/activemq-data"/>
      <!-- To use a different datasource, use th following syntax : -->
      <!--
      <journaledJDBC journalLogFiles="5" dataDirectory="../activemq-data" dataSource="#postgres-ds"/>
       -->
    </persistenceAdapter>
 
    <transportConnectors>
       <transportConnector name="default" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
       <transportConnector name="stomp"   uri="stomp://localhost:61613"/>
    </transportConnectors>
   
    <networkConnectors>
      <!-- by default just auto discover the other brokers -->
      <networkConnector name="default" uri="multicast://default"/>
      <!--
      <networkConnector name="host1 and host2" uri="static://(tcp://host1:61616,tcp://host2:61616)" failover="true"/>
      -->
    </networkConnectors>
   
    <plugins>
      <!--  use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
      <jaasAuthenticationPlugin configuration="activemq-domain" />
      <!--  lets configure a destination based authorization mechanism -->
      <authorizationPlugin>
        <map>
          <authorizationMap>
            <authorizationEntries>
              <authorizationEntry queue=">" read="admins,guests" write="guests" admin="admins,guests" />
              <authorizationEntry queue="USERS.>" read="users" write="users" admin="users" />
              <authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
             
              <authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
              <authorizationEntry topic="USERS.>" read="users" write="users" admin="users" />
              <authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
             
              <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>
            </authorizationEntries>
          </authorizationMap>
        </map>
      </authorizationPlugin>
    </plugins>   
  </broker>
</beans>

<authorizationPlugin>標籤所包含的內容授權配製資訊。
從上面的設定檔可以看出,ActiveMQ使用者針對不同的queue或者topic設定了可以進行操作的組。此處主要涉及三種操作許可權:read, write, admin,下面對其詳細介紹。
read:可以從queue或者topic裡面接收訊息
write:可以向queue或者topic發送訊息
admin:可以建立queue或者topic(可能還有別的功能)
這些檔案配製好時候,ActiveMQ就具有了基本的安全機制,另外需要注意的是,在ActiveMQ 4.0.1 release版中,並沒有帶有activemq-jaas.jar,需要自己下載。但在apache-activemq-4.1.1release版中已經增加activemq-jaas-4.1.1.jar,在ActiveMQ的lib目錄下。
以上是對ActiveMQ的基於JAAS的安全機制的分析,至於這種方法是否靈活、方便、安全,與編程模式實現的安全機制有什麼異同還需要進一步分析比較。

ActiveMQ中的安全機制 [轉]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.