赠人玫瑰,手留余香.

ActiveMQ版本 :5.9

ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换。

JAAS认证插件

JAAS(Java Authentication and Authorization Service)也就是java的验证Authentication)、授权

(Authorization)服务。简单来说,验证Authentication就是要验证一个用户的有效性,即用户名、密码是否正确。

授权Authorization就是授予用户某种角色,可以访问哪些资源。JAASAuthentication Plugin依赖标准的JAAS

机制来实现认证。通常情况下,你需要通过设置java.security.auth.login.config系统属性来配置login

modules的配置文件。如果没有指定这个系统属性,那么JAAS Authentication Plugin会缺省使用

login.config作为文件名。

以下是一个login.config文件的例子:

activemq {org.apache.activemq.jaas.PropertiesLoginModule requiredorg.apache.activemq.jaas.properties.user="users.properties"org.apache.activemq.jaas.properties.group="groups.properties";};

users.properties

admin=adminuser=skyguest=sky

group.properties

admins=adminusers=userguests=guest

这个login.config文件中设置了两个属性:

org.apache.activemq.jaas.properties.userorg.apache.activemq.jaas.properties.group

分别用来指向user.properties和group.properties文件。需要注意的是,PropertiesLoginModule使用本地文件的查找方式,而且查找时采用的base directory是login.config文件所在的目录。因此这个login.config说明user.properties和group.properties文件存放在跟login.config文件相同的目录里。(activemq 5.9 默认提供了以上的配置文件)以下是activemq.xml配置的一个例子:

<!– sky –><plugins>  <!– Lets configure a destination based authorization mechanism采用JAAS的管理机制来配置各种角色的权限–><!– use JAAS to authenticate using the login.config file on the classpath to configure JAAS . –><jaasAuthenticationPlugin configuration="activemq" /><authorizationPlugin><map><authorizationMap><authorizationEntries><authorizationEntry queue=">" read="admins" write="admins" admin="admins" /><authorizationEntry queue="USERS.>" read="users" write="admins" admin="admins" /><authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" /><authorizationEntry queue="TEST.*" read="guests" write="guests" /><authorizationEntry topic=">" read="admins" write="admins" admin="admins" /><!– 表示通配符,例如USERS.>表示以USERS.开头的主题,>表示所有主题,read表示读的权限,write表示写的权限,,admin表示角色组–><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><!– let's assign roles to temporary destinations. comment this entry if we don't want any roles assigned to temp destinations –><tempDestinationAuthorizationEntry><tempDestinationAuthorizationEntryread="tempDestinationAdmins" write="tempDestinationAdmins"admin="tempDestinationAdmins" /></tempDestinationAuthorizationEntry></authorizationMap></map></authorizationPlugin></plugins>

基于以上的配置,在JAAS的LoginContext中会使用login.config中activemq中配置的PropertiesLoginModule来进行登陆。

针对不同的queue或者topic设置了可以进行操作的组。里面主要涉及三种操作:read, write, admin

这些文件配制好时候,ActiveMQ就具有了基本的安全机制,当Client(生产者和消费者)连接ActiveMQ需要使用账号,还可以限制具体的Client对于某个/某些Topic/Queue的操作权限.

例如:

<authorizationEntry queue=">" read="admins" write="admins" admin="admins" />。 ">"是通配符的意思,也就是admins组的角色,拥有read、write、admin的权限。<authorizationEntry queue="USERS.>" read="users" write="admins" admin="admins" /> 。queue名称以"USERS."开头的,users组只拥有读权限,即只能收消息,不能发消息。简单认证插件<plugins>…<simpleAuthenticationPlugin><users><authenticationUser username="system" password="manager" groups="users,admins"/><authenticationUser username="user" password="password" groups="users"/><authenticationUser username="guest" password="password" groups="guests"/></users></simpleAuthenticationPlugin> </plugins>

下面是基于JASS认证插件的配置,首先启动activemq服务:

大海,别为森林的渺小而沮丧,

赠人玫瑰,手留余香.

相关文章:

你感兴趣的文章:

标签云: