EMQX_AUTH_HTTP 插件使用指南


在閱讀該教程之前,假定你已經了解 MQTTEMQ X 的簡單知識。

emqx_auth_http 它將每個終端的接入認證訪問控制事件拋給用戶自己的 WebServer 以實現接入認證和ACL鑒權的功能。其架構邏輯如下:

emqx_auth_http 主要處理的事情有:*

  1. 認證:每當終端一個CONNECT請求上來時,將其攜帶的 ClientId、Username、Password 等參數,向用戶自己配置Web Services 發起一個認證請求。成功則允許該終端連接!
  2. ACL:每當終端執行 PUBLISH 和 SUBSCRIBE 操作時,將 ClientId 和 Topic 等參數,像用戶自己配置 Web Services 發起一個 ACL 的請求。成功則允許此次 PUBLISH/SUBSCRIBE

實際上,在 EMQX 的集群里面,emqx_auth_http 對於用戶的 Web Services 來講只是一個簡單的、無狀態的 HTTP Client,他只是將 EMQX 內部的登錄認證、和ACL控制的請求轉發到用戶的 Web Services,並做一定邏輯處理而已。

插件配置項說明

在這里給出了其3.1.0版本的默認配置文件,雖然看着內容比較多,其實只是配置了 三個 HTTP Request 的參數

  • 終端接入認證(auth_req)
  • 判斷是否為超級用戶(super_req)
  • ACL請求(acl_req)

其中,我們以認證為例,其每項分別代表了:

配置項 說明
auth.http.auth_req 配置 auth_req 請求所需要訪問的 URL 路徑地址
auth.http.auth_req.method 配置 auth_req 請求所使用的 HTTP Method,僅支持 GET/POST/PUT
auth.http.auth_req.params 配置 auth_req 請求所攜帶的參數列表

而對於其中 params 項中,支持各種參數占位符,其含義見配置文件注釋。例如:

auth.http.auth_req.params = clientid=%c,username=%u,password=%P

其代表的含義是,auth_req 包括三個參數,這個三個參數的 key 分別是 clientid username password 其值分別會替換為終端在接入時其真實的 ClientId Username Password

默認的所有配置如下:

##--------------------------------------------------------------------
## Authentication request.
##
## Variables:
##  - %u: username
##  - %c: clientid
##  - %a: ipaddress
##  - %P: password
##  - %cn: common name of client TLS cert
##  - %dn: subject of client TLS cert
##
## Value: URL
auth.http.auth_req = http://127.0.0.1:8991/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:8991/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:8991/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

如何返回

在了解了如何配置 emqx_auth_http 插件后,剩下關鍵的是 Webserver 如何返回成功或者失敗。

認證

認證成功:

HTTP Status Code: 200

忽略此次認證

HTTP Status Code: 200
Body: ignore

錯誤

HTTP Status Code: Except 200

超級用戶

確認為超級用戶:

HTTP Status Code: 200

非超級用戶

HTTP Status Code: Except 200

ACL鑒權

允許PUBLISH/SUBSCRIBE:

HTTP Status Code: 200

忽略此次鑒權:

HTTP Status Code: 200
Body: ignore

拒絕該次PUBLISH/SUBSCRIBE:

HTTP Status Code: Except 200


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM