EMQX(四)—认证机制

一、认证简介

身份认证是大多数应用的重要组成部分,MQTT 协议支持用户名密码认证,启用身份认证能有效阻止非法客户端的连接。
EMQ X 中的认证指的是当一个客户端连接到 EMQ X 的时候,通过服务器端的配置来控制客户端连接服务器的权限。

EMQ X 的认证支持包括两个层面:

  • MQTT 协议本身在 CONNECT 报文中指定用户名和密码,EMQ X 以插件形式支持基于Username、ClientID、HTTP、JWT、LDAP 及各类数据库如
    MongoDB、MySQL、PostgreSQL、Redis 等多种形式的认证。
  • 在传输层上,TLS 可以保证使用客户端证书的客户端到服务器的身份验证,并确保服务器向客户端验证服 务器证书。也支持基于 PSK 的TLS/DTLS 认证。

忽略认证(ignore):当前认证方式中未查找到认证数据,无法显式判断结果是成功还是失败,交由认证链下一认证方式或匿名认证来判断。

匿名认证
EMQ X 默认配置中启用了匿名认证,任何客户端都能接入 EMQ X。没有启用认证插件或认证插件没有显式允许/拒绝(ignore)连接请求时,EMQ X 将根据匿名认证启用情况决定是否允许客户端连接。

配置匿名认证开关:# etc/emqx.conf ## Value: true | false allow_anonymous = true

二、认证流程

EMQX的认证方式有多种,多种认证方式组成了认证链,当同时启用多个认证方式时,EMQ X 将按照插件开启先后顺序进行链式认证:
一旦认证成功,终止认证链并允许客户端接入
一旦认证失败,终止认证链并禁止客户端接入
直到最后一个认证方式仍未通过,根据匿名认证配置判定:
匿名认证开启时,允许客户端接入
匿名认证关闭时,禁止客户端接入

EMQX(四)—认证机制_第1张图片

三、Username认证

Username 认证使用配置文件预设客户端用户名与密码,支持通过 HTTP API 管理认证数据。
Username 认证不依赖外部数据源,使用上足够简单轻量。使用这种认证方式前需要开启插件,我们可以在Dashboard里找到这个插件并开启,插件名称为:emqx_auth_username。

哈希方法
Username 认证默认使用 sha256 进行密码哈希加密,可在 etc/plugins/emqx_auth_username.conf 中更改:
配置哈希方法后,新增的预设认证数据与通过 HTTP API 添加的认证数据将以哈希密文存储在 EMQ X 内置数据库中。

EMQ X提供了对应的HTTP API用以维护内置数据源中的认证信息,我们可以添加/查看/取消/更改认证数据。他们的API在Dashboard插件可以查看。API分别是:
pi/v4/auth_username;
api/v4/auth_username{ “username”: “emqx_u”, “password”: “emqx_p”};
api/v4/auth_username/ u s e r n a m e " p a s s w o r d " : " e m q x n e w p " ; a p i / v 4 / a u t h u s e r n a m e / {username}{ "password": "emqx_new_p"}; api/v4/auth_username/ username"password":"emqxnewp";api/v4/authusername/{username};
等等。具体使用请查阅Dashboard界面的API文档。

四、 Client ID 认证

Client ID 认证使用配置文件预设客户端Client ID 与密码,支持通过 HTTP API 管理认证数据。
Client ID 认证不依赖外部数据源,使用上足够简单轻量,使用该种认证方式时需要开启 emqx_auth_clientid插件,直接在DashBoard中开启即可。
基本思路与用户名认证是一致的。

五、HTTP认证

HTTP 认证使用外部自建 HTTP 应用认证数据源,根据 HTTP API 返回的数据判定认证结果,能够实现复杂的认证鉴权逻辑。启用该功能需要将 emqx_auth_http 插件启用,并且修改该插件的配置文件,在里面指定HTTP认证
接口的url。

认证原理
EMQ X 在设备连接事件中使用当前客户端相关信息作为参数,向用户自定义的认证服务发起请求查询权限,
通过返回的 HTTP 响应状态码 (HTTP statusCode) 来处理认证请求。
认证失败:API 返回 4xx 状态码
认证成功:API 返回 200 状态码
忽略认证:API 返回 200 状态码且消息体 ignore。

详细的配置,这里我们不多讲解,我将课件上传到资源中,需要的自行下载。
这里我们只要知道其套路就行。即自定义一个身份认证项目,EMQX配置文件里写上这个认真服务的访问地址,EMQX客户端每次连接时,会给自定义认证服务发请求,返回200,则连接成功,返回4xx,则链接失败。

你可能感兴趣的:(MQ~EMQX,java)