Emqtt -- 07 -- HTTP插件认证及访问控制

原文链接:Emqtt – 07 – HTTP插件认证及访问控制


相关文章:


最后我们来了解下 Http 插件认证以及访问控制,默认关闭了匿名认证及鉴权行为


一、搭建本地http访问控制项目

  • 这里我用 IDEA 搭建了一个 SpringBoot 项目,SpringBoot 的版本是 2.1.1.RELEASE

    • application.yml

      server:
          port: 8887
      
    • MqttController.java

      /**
       * @Title: MqttController.java
       * @Description: MQ Controller层
       * @Author: xj
       * @Date: 2019/1/7 15:27
       */
      @RestController
      @RequestMapping(value = "/mqtt")
      public class MqttController {
      
          private static final Logger logger = LoggerFactory.getLogger(MqttController.class);
      
          /**
           * 授权请求
           *
           * @param clientid
           * @param username
           * @param password
           * @param response
           */
          @PostMapping(value = "/auth")
          public void auth(String clientid, String username, String password, HttpServletResponse response) {
              logger.info("clientid: " + clientid);
              logger.info("username: " + username);
              logger.info("password: " + password);
              // 处理自身的业务逻辑
              // ......
              response.setStatus(200);
          }
      
          /**
           * 超级用户请求
           *
           * @param clientid
           * @param username
           * @param response
           */
          @PostMapping(value = "/superuser")
          public void superuser(String clientid, String username, HttpServletResponse response) {
              logger.info("clientid: " + clientid);
              logger.info("username: " + username);
              // 处理自身的业务逻辑
              // ......
              response.setStatus(200);
          }
      
          /**
           * 鉴权请求
           * 
           * @param access
           * @param username
           * @param clientid
           * @param ipaddr
           * @param topic
           * @param response
           */
          @GetMapping(value = "/acl")
          public void acl(Short access, String username, String clientid, String ipaddr, String topic, HttpServletResponse response) {
              logger.info("access: " + access);
              logger.info("username: " + username);
              logger.info("clientid: " + clientid);
              logger.info("ipaddr: " + ipaddr);
              logger.info("topic: " + topic);
              // 处理自身的业务逻辑
              // ......
              response.setStatus(200);
          }
      }
      
  • 项目开发完成后,将其打包部署到服务器上并运行


二、配置 http 认证

  • 在 etc/plugins 目录下修改 emq_auth_http.conf 配置文件

    • cd /usr/local/emqtt/emqttd/etc/plugins

    • vim emq_auth_http.conf

      ##--------------------------------------------------------------------
      ## HTTP Auth/ACL Plugin
      ##--------------------------------------------------------------------
      
      ##--------------------------------------------------------------------
      ## Authentication request.
      ##
      ## Variables:
      ##  - %u: username
      ##  - %c: clientid
      ##  - %a: ipaddress
      ##  - %P: password
      ##
      ## Value: URL
      auth.http.auth_req = http://127.0.0.1:8887/mqtt/auth
      ## Value: post | get | put
      auth.http.auth_req.method = post
      ## Value: Params
      auth.http.auth_req.params = clientid=%c,username=%u,password=%P
      
      ##--------------------------------------------------------------------
      ## Superuser request.
      ##
      ## Variables:
      ##  - %u: username
      ##  - %c: clientid
      ##  - %a: ipaddress
      ##
      ## Value: URL
      auth.http.super_req = http://127.0.0.1:8887/mqtt/superuser
      ## Value: post | get | put
      auth.http.super_req.method = post
      ## Value: Params
      auth.http.super_req.params = clientid=%c,username=%u
      
      ##--------------------------------------------------------------------
      ## ACL request.
      ##
      ## Variables:
      ##  - %A: 1 | 2, 1 = sub, 2 = pub
      ##  - %u: username
      ##  - %c: clientid
      ##  - %a: ipaddress
      ##  - %t: topic
      ##
      ## Value: URL
      auth.http.acl_req = http://127.0.0.1:8887/mqtt/acl
      ## Value: post | get | put
      auth.http.acl_req.method = get
      ## Value: Params
      auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t
      
      • 请求路由对应如下

        • auth.http.auth_req:对应授权请求

        • auth.http.super_req:对应超级用户请求

        • auth.http.acl_req:对应鉴权请求

    • :wq

  • 开启 redis 认证插件

    • 第一种方式:emqttd_ctl plugins load emq_auth_redis

    • 第二种方式:在 web 管理控制台中开启该插件

  • 重启服务,使插件生效


三、测试

  • 此时我们再启动项目时,emqtt 服务都会去请求这三个接口,通过返回的状态码来决定是否通过 (200 表示通过,不是 200 则表示不通过)

  • 此处我为了方便测试,将三个接口的返回状态码都设置为了 200,大家可以通过处理自己的业务逻辑来返回不同的状态码,从而灵活地实现 emqtt 的 HTTP 访问控制

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值