自定义鉴权模式
自定义鉴权模式是一种不再依赖阿里云的AccessKey、SecretKey认证以及RAM授权校验,而是可以由您自定义并上传身份认证与Topic授权信息的鉴权方式。这种鉴权模式比较灵活自由,一般适用于自建上云迁移场景,以便尽可能地与原有权限校验方式保持一致。
名词解释
术语 | 说明 |
应用服务器 | 您管理本地账号的服务器,用来替客户端申请和管理设备访问凭证服务的应用。 |
MQTT服务器 | 云消息队列 MQTT 版权限认证和消息收发服务器,用来处理应用服务器发起的鉴权相关的请求以及消息收发业务。 |
使用说明
无论使用何种鉴权模式,本质上可以归结为身份认证和资源权限两个基本功能。身份认证,即客户端的身份标识,由Username/Password传参以及ClientId来识别,然后进行服务端校验。资源权限,主要是Topic的发布订阅权限,由您提前把授权信息上传到服务端,然后对客户端实际收发的Topic进行收发权限校验。
身份认证
目前服务端提供两种维度的身份标识:
根据Username来标识,无需关注ClientId,多个客户端可以共用。
根据Username + ClientId来标识,表示具体到某个客户端专用,其他客户端不会混用。
Password即密钥或签名,一般不建议直接设置为密钥,而是使用密钥对ClientId进行签名得到Password。具体计算方法如下:
举例:一个客户端的Client ID是GID_Test@@@0001,使用的AccessKey Secret(secretKey)是XXXXX。用XXXXX作为密钥,使用HMAC-SHA1方法对待签名字符串GID_Test@@@0001做签名计算得到一个二进制数组,再对该二进制数组做Base64编码得到最终的Password签名字符串。
不过,考虑到自定义权限的灵活性以及签名算法的多样式,我们也提供了简单设置原始签名的方式,即服务端只比较Password和您提前上传的原始签名。
资源权限
资源主要是指Topic,云消息队列 MQTT 版支持多级Topic,其中一级Topic需要在控制台创建。权限主要是指Topic的发布和订阅权限。在客户端收发消息之前,需要对相应的Topic授权(支持MQTT多级Topic或通配符),授权的对象可以是Username,或者具体的客户端(ClientId)。
连接黑名单
自定义鉴权模式提供了连接黑名单功能,您可以设置禁用某个客户端(ClientId)的连接。
使用流程
具体流程如下:
用户应用服务端调用相关OpenAPI接口向MQTT服务器上传身份信息(账号、密码等)、Topic授权信息。
用户应用服务端设置客户端相关传参,如Username、Password、ClientId。
客户端向MQTT服务器发起请求,通过鉴权后,使用对应的Topic进行消息收发。
使用限制
实例限制:目前仅专业版、铂金版实例支持自定义鉴权模式。
过期设置:云消息队列 MQTT 版对于身份认证、资源授权以及连接黑名单等数据暂不提供过期设置功能,您可以及时删除相关接口进行管理。
容量限制:无论是身份认证,还是资源权限都占用了实例的元数据存储,所以您需要自行管理鉴权数据,及时删除不用的权限数据。目前身份认证、资源授权连接数均不能超过实例的连接数规格限制,且连接黑名单也是一种权限数据,其数量包括在资源权限里面,二者之和不能超过实例的连接数规格限制。连接数规格限制详情,请参见使用限制。
Group降级
云消息队列 MQTT 版定义了Group,用于指定一组逻辑功能完全一致的节点共用的组名,代表一类相同功能的设备,ClientId由两部分组成,形式为<GroupID>@@@<DeviceID>
。然而由于该格式的限制,导致已有自定义设备ID很难迁移过来。为此,我们也支持降级Group的功能,即ClientId可以任意填写,在Group降级时,一些控制台功能比如设备查询、设备轨迹查询暂且也被降级不能使用。
相关API
自定义鉴权模式提供了身份认证和资源授权相关的管控API,您可以根据身份认证的相关API来管理身份信息,可以根据资源授权相关的API来管理Topic的收发权限。
API | 描述 |
调用AddCustomAuthIdentity添加账号身份认证信息。 | |
调用UpdateCustomAuthIdentity更新自定义身份认证信息。 | |
调用QueryCustomAuthIdentity查询自定义身份认证信息。 | |
调用DeleteCustomAuthIdentity删除自定义身份认证信息。 | |
调用AddCustomAuthPermission添加Topic资源授权信息。 | |
调用UpdateCustomAuthPermission更新Topic资源授权信息。 | |
调用QueryCustomAuthPermission查询Topic授权信息。 | |
调用DeleteCustomAuthPermission删除Topic授权信息。 | |
调用AddCustomAuthConnectBlack添加连接黑名单,禁用某个设备连接。 | |
调用DeleteCustomAuthConnectBlack删除连接黑名单。 | |
调用QueryCustomAuthConnectBlack查询连接黑名单。 |