ActiveMQ Part 5 : 认证与授权
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
角色授权:
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>
小技巧:
我们客户的一个需求: 所有发布端在发送消息时,对未携带用户名和密码(如下代码)的也可以发消息;
所有订阅端必须携带用户名和密码才能订阅指定的主题消息;
1 // 发布端 2 byte result = Client.Connect("mypubid", null, null, false, 30); 3 4 // 订阅端 5 byte result = Client.Connect("mysubid", null, null, false, 30);
这里相当于要满足匿名用户的访问,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="users, admins" admin="users, admins"/> 16 </authorizationEntries> 17 </authorizationMap> 18 </map> 19 </authorizationPlugin> 20 </plugins> 21 </broker>
当然,这需要在 simpleAuthenticationPlugin 认证的场景下才能满足; 这种方式运维起来也非常不方便,在变更用户、角色、主题及授权策略时,都需要重启服务;
3. 认证与授权 - jassAuthenticationPlugin
以上是关于ActiveMQ Part 5 : 认证与授权的主要内容,如果未能解决你的问题,请参考以下文章
入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 MVC认证与授权