云服务器内容精选

  • 使用MQTT(S)协议-密钥接入的鉴权流程 图1 MQTT(S)协议-密钥接入鉴权流程图 通过调用注册接口向 物联网平台 发送注册请求或者在控制台上注册设备。 注册时需要填写设备标识码,通常使用MAC地址,Serial No或IMEI作为nodeId。 物联网平台向设备分配全局唯一的设备ID (deviceId)和密钥(secret)。 密钥可以在注册设备时自定义,如果没有定义,平台将自动分配密钥。 设备侧需集成预置CA证书(仅针对MQ TTS 协议接入的鉴权流程)。 设备登录时,携带设备ID(deviceId)和密钥(secret)发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 响应示例 { "access_token": "*****************", "token_type": "bearer", "expires_in": 359, "scope": "all", "plat_user": { "userId": 107027, "userNo": "XXXXXXXXXXX", "userName": "test", "userType": "API", "phone": null, "tenantId": 50222, "status": "0", "deleteFlag": 0, "pwdUpdateDate": "2022-03-17T02:35:04.000+00:00", "userExtendMap": { "clientId": "isdp-xxxx-openapi" }, "password": null, "salt": null, "currentLoginType": "password" }}
  • 示例说明 以使用MD5算法为例: 通过req_auth请求对象: http://hwcdn.example.com/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3 密钥设为:huaweicloud12345(由用户自行设置) 鉴权生效开始日期为:2017年6月30日00:00:00,计算出来的秒数为1498752000。并且设置有效时间为1800s。 CDN服务器构造一个用于计算HashValue的签名字符串: /T128_2_1_0_sdk/0210/M00/82/3E/test.mp3-1498752000-0-0-huaweicloud12345 CDN服务器根据该签名字符串计算HashValue: HashValue = md5sum(“/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3-1498752000-0-0-huaweicloud12345”) =4143ae4a8034c637fd256dfd3542bafc 请求时URL为: http://cdn.example.com/T128_2_1_0_sdk/0210/M00/82/3E/test.mp3?auth_key=1498752000-0-0-4143ae4a8034c637fd256dfd3542bafc 如果请求在有效时间内(请求时间小于等于2017年6月30日00:30:00),并且计算出来的HashValue与用户请求中带的md5hash值(4143ae4a8034c637fd256dfd3542bafc)一致,则鉴权通过。
  • 校验方法 CDN服务器收到请求后,会按照如下步骤进行校验: 是否携带鉴权参数。如果没有携带鉴权参数,认为请求非法,返回HTTP 403错误。 时间校验:CDN服务器接收到客户端请求后,判断鉴权URL中的“timestamp参数 + 鉴权URL有效时长”是否大于当前时间。 如果“timestamp参数 + 鉴权URL有效时长”小于当前时间,认为过期失效并返回HTTP 403错误。 如果“timestamp参数 + 鉴权URL有效时长”大于或等于当前时间,则通过时间校验,继续执行步骤3。 加密串校验:时间校验通过后,则以sstring方式构造出一个字符串(参考以下sstring构造方式)。然后使用md5(sha256)算法算出HashValue,并和用户请求中带来的md5hash(sha256)进行对比。结果一致则认为鉴权通过并返回文件,否则鉴权失败返回HTTP 403错误。HashValue计算方式如下: sstring = "Filename-Timestamp-rand-uid-PrivateKey" HashValue = md5sum(sstring) 或: sstring = "Filename-Timestamp-rand-uid-PrivateKey" HashValue = sha256sum(sstring)
  • 在配置服务级条件键billing:cloudServiceType后,接口调用返回CBC.0151 配置服务级条件键billing:cloudServiceType如图所示: 目前服务级条件键billing:cloudServiceType仅支持退订权限项billing:subscription:unsubscribe。 如果配置此条件键后出现以下情况报错: { "error_code": "CBC.0151", "error_msg": "user access denied.checkCustomerPermission,correct permission code is billing:order:view" } 可用以下办法解决: 单独设置退订权限项billing:subscription:unsubscribe和服务级条件键billing:cloudServiceType,与其他权限项配置分开。 登录新版控制台。 对原有策略进行修改,配置退订权限项。 确保策略内容列为允许,云服务列为billing,操作列写操作勾选billing:subscription:unsubscribe。如下图所示。 退订权限项下配置云服务级条件键。 选择请求条件(可选)列,单击添加条件。添加请求条件弹框中填写如下内容: 条件键:billing:cloudServiceType 运算符:StringEquals 值:hws.service.type.ebs 复制策略,配置其他不受云服务级条件键影响的权限。 单击克隆键,复制一条新的策略。删除新策略特定条件列中的条件。 取消勾选新策略操作列写操作billing:subscription:unsubscribe。单击确定,修改完成。 父主题: 细粒度鉴权
  • 鉴权方式A 鉴权方式A主要通过Key、timestamp、rand(随机数)、uid(设置为0)和URL计算鉴权串。 鉴权URL格式 原始URL?auth_key={timestamp}-{rand}-{uid}-{md5hash} md5hash的计算公式: sstring = "{URI}-{Timestamp}-{rand}-{uid}-{Key}"HashValue = md5sum(sstring) 表2 鉴权字段描述 字段 描述 timestamp 用户定义的有效访问时间起始点,值为1970年1月1日以来的当前时间秒数 。十进制或者十六进制整数。 示例:1592639100(即2020-06-20 15:45) 时长 鉴权URL有效的时间长度。 若设置的有效时间为1800s,则用户可在从timestamp开始的1800s内允许访问直播地址。超出该区间,鉴权失败。 示例:若设置的访问时间为2020-6-30 00:00:00,则链接真正失效时间为2020-6-30 00:30:00。 rand 随机数,建议使用UUID,不能包含中划线"-"。 示例:477b3bbc253f467b8def6711128c7bec uid userID。暂未使用,直接设置成0即可。 md5hash 通过md5算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度32。 sstring = "{URI}-{Timestamp}-{rand}-{uid}-{Key}"HashValue = md5sum(sstring) URI 指原始URL中从 域名 后开始到最后的路径。 标准直播场景 示例:/livetest/huawei1.flv 低时延直播场景 示例:/livetest/huawei1.sdp Key 在控制台设置的防盗链Key值,具体请参见开启Key防盗链。 鉴权URL示例 标准直播场景 以生成播放鉴权地址为例,推流鉴权地址的生成与播放鉴权地址的生成方法相同。 原始URL:http://test-play.example.com/livetest/huawei1.flvtimestamp:1592639100时长:1800sKey:GCTbw44s6MPLh4GqgDpnfuFHgy25Enlyrand:477b3bbc253f467b8def6711128c7becuid:0URI:/livetest/huawei1.flv 根据计算公式,得到md5hash。 HashValue = md5sum("/livetest/huawei1.flv-1592639100-477b3bbc253f467b8def6711128c7bec-0-GCTbw44s6MPLh4GqgDpnfuFHgy25Enly") = dd1b5ffa00cf26acec0c169ae1cfabea 则鉴权播放地址为: http://test-play.example.com/livetest/huawei1.flv?auth_key=1592639100-477b3bbc253f467b8def6711128c7bec-0-dd1b5ffa00cf26acec0c169ae1cfabea
  • 鉴权方式B 鉴权方式B主要通过Key、timestamp和StreamName计算鉴权串。 鉴权URL格式 原始URL?txSecret=md5(Key + StreamName + txTime)&txTime=hex(timestamp) 表3 鉴权字段描述 字段 描述 txTime 播放URL的有效时间,为Unix时间戳的十六进制结果。 如果当前txTime的值大于当前请求的时间则可以正常播放,否则播放会被后台拒绝。 示例:5eed5888(即2020.06.20 08:30:00) Key 在控制台设置的防盗链Key值,具体请参见开启Key防盗链。 txSecret URL中的加密参数。 通过将key,StreamName,txTime依次拼接的字符串进行MD5加密算法得出。 txSecret = md5(Key + StreamName + txTime) 时长 鉴权URL的有效时间长度。 若txTime设置为当前时间,有效时间设置为1249s,则播放URL过期时间为当前时间+ 1249s。 鉴权URL示例 标准直播场景 以生成播放鉴权地址为例,推流鉴权地址的生成与播放鉴权地址的生成同理。 原始URL:http://test-play.example.com/livetest/huawei1.flvKey:GCTbw44s6MPLh4GqgDpnfuFHgy25EnlyStreamName:huawei1txTime:5eed5888时长:1249s 根据计算公式,得到txSecret。 txSecret = md5(GCTbw44s6MPLh4GqgDpnfuFHgy25Enlyhuawei15eed5888) = 5cdc845362c332a4ec3e09ac5d5571d6 则鉴权播放地址为: http://test-play.example.com/livetest/huawei1.flv?txSecret=5cdc845362c332a4ec3e09ac5d5571d6&txTime=5eed5888
  • 鉴权方式D 鉴权方式D主要通过Key、timestamp和StreamName计算鉴权串。 鉴权URL格式 原始URL?hwSecret=hmac_sha256(Key, StreamName + hwTime)&hwTime=hex(timestamp) 表5 鉴权字段描述 字段 描述 hwTime 播放URL的有效时间,为Unix时间戳的十六进制结果。 如果当前hwTime+时长的值大于当前请求的时间则可以正常播放,否则播放会被后台拒绝。 示例:5eed5888(即2020.06.20 08:30:00) Key 在控制台设置的防盗链Key值,具体请参见开启Key防盗链。 hwSecret URL中的加密参数。 以Key和StreamName+hwTime为参数进行HMAC-SHA256加密算法得出。 hwSecret = hmac_sha256(Key, StreamName + hwTime) 时长 鉴权URL的有效时间长度。 若hwTime设置为当前时间,有效时间设置为1249s,则播放URL过期时间为当前时间+ 1249s。 鉴权URL示例 标准直播场景 以生成播放鉴权地址为例,推流鉴权地址的生成与播放鉴权地址的生成同理。 原始URL:http://test-play.example.com/livetest/huawei1.flvKey:GCTbw44s6MPLh4GqgDpnfuFHgy25EnlyStreamName:huawei1hwTime:5eed5888时长:1249s 根据计算公式,得到hwSecret。 hwSecret = hmac_sha256(GCTbw44s6MPLh4GqgDpnfuFHgy25Enly, huawei15eed5888) = ce201856a0957413319e883c8ccae13602f01d3d91e21daf5161964cf708a6a8 则鉴权播放地址为: http://test-play.example.com/livetest/huawei1.flv?hwSecret=ce201856a0957413319e883c8ccae13602f01d3d91e21daf5161964cf708a6a8&hwTime=5eed5888
  • 注意事项 该功能为可选项,默认不启用。启用该功能后,原始直播加速URL将无法使用,需要按规则生成合法的防盗链URL。 建议推流与播放鉴权使用不同的Key值,以增强安全性。若防盗链URL过期,或者签名不能通过,直播流将播放失败,并返回“403 Forbidden”信息。 针对RTMP、FLV这类长连接业务,只有服务端收到用户请求时,才进行防盗链参数校验,校验通过后可以持续播放。 针对HLS这类业务,用户播放后会携带相同的防盗链参数,持续发起请求。一旦防盗链参数过期,服务端便会因校验不通过,而拒绝访问,导致播放中断。 所以建议这类业务,适当调整鉴权过期时间,避免因时间过短,而中途就播放失败。示例:如果预估HLS播放时长每次都在1小时以内,可设置过期时间为3600秒。
  • AuthObject对象 AuthObject对象即鉴权客体,被鉴权对象。 表2 AuthObject对象参数说明 参数名称 数据类型 描述 projectId String 被鉴权资源所在的项目id,对于不属于项目的资源,允许为空。 对于非多项目应用(MetaService中tenantModel为null或者TENANT),允许为空。 如果为多项目应用(MetaService中tenantModel值为TENANT_PROJECT),则传入projectId。 resource String 被鉴权资源,不允许为空。 根据MetaBOAuthorizeType不同的值,传入对应值。 ROOT:传入BO对象所在的Root BO的id。 TYPE_LEVEL:传入BO name。 INSTANCE_LEVEL:传入BO对象id。
  • AuthSubject对象 AuthSubject对象即鉴权主体。 表1 AuthSubject对象参数说明 参数名称 数据类型 描述 tenantId String 根据用户所在的租户传值: 对于非多租应用(MetaService中tenantModel为空),允许为空。 如果为多租应用(MetaService中tenantModel值为TENANT或者TENANT_PROJECT),则传入tenantId。 uid String 鉴权主体的user id,不允许为空。
  • 约束与限制 使用自定义鉴权功能,要求设备必须使用TLS同时支持SNI(Server Name Indication),SNI中需要携带平台分配的域名。 默认每个用户最多支持5个自定义鉴权模板,只能启用一个激活状态的模板。 鉴权模板函数嵌套最大深度为5层。 模板内容体最大长度不能超过4000字符,且不能包含中文字符。 设备为密钥认证类型时,模板密码函数必须包含设备原始密钥参数(iotda::device::secret)。 使用模板鉴权时,鉴权参数username不能与自定义函数鉴权username格式重叠,否则会使用自定义函数鉴权,比如: {deviceId}|authorizer-name={authorizer-name}|xxx 自定义模板鉴权优先级高于平台默认鉴权,即激活自定义鉴权模板后设备就会使用模板鉴权,不会再使用平台默认鉴权方式。 自定义认证功能是为方便用户快速接入平台,免于设备侧改造,平台将使用您提供的鉴权模板进行鉴权,请合理审视认证方式的安全程度,避免使用弱校验或者免校验,由于您自定义模板安全程度过低造成的安全问题,平台将不承担任何安全责任;
  • 概述 自定义鉴权是指用户可以通过函数服务自定义实现鉴权逻辑,以对接入平台的设备进行身份认证。 在设备接入物联网平台前,用户可以通过应用服务调用控制台配置自定义鉴权信息,然后通过调用函数服务(FunctionGraph)配置自定义鉴权函数。在设备接入物联网平台时,物联网平台会获取设备ID和自定义鉴权函数名称等参数,并向FunctionGraph发起发起鉴权请求,由用户实现鉴权逻辑以完成设备的接入鉴权。
  • 约束与限制 使用自定义鉴权功能,要求设备必须使用TLS同时支持SNI(Server Name Indication),SNI中需要携带平台分配的域名。 每个用户默认最多支持10个自定义鉴权的配置。 自定义鉴权的函数最大处理时间为5秒,5秒内函数没返回结果,则认为鉴权失败。 每个用户总鉴权请求的TPS限制参考产品规格说明,自定义鉴权为总鉴权TPS的50%(不包含设备自注册)。 若用户开启了缓存FunctionGraph的鉴权结果,则在相同参数下,函数服务的修改生效时间需在缓存超期后才能生效。 在所有的设备接入鉴权方式中,当满足自定义鉴权条件时(匹配到设备携带的自定义鉴权器名称或用户配置了默认自定义鉴权器),优先采用自定义鉴权方式进行设备接入。 自定义认证功能是为方便用户快速接入平台,免于设备侧改造,平台将使用您提供的鉴权函数进行鉴权,请合理审视认证方式的安全程度,避免使用弱校验或者免校验,由于您自定义函数安全程度过低造成的安全问题,平台将不承担任何安全责任;
  • 签名计算工具 SFS提供可视化签名计算工具,帮助您轻松完成签名计算。 表1 签名计算工具 签名计算方式 签名计算工具获取地址 Header中携带签名 可视化签名计算工具 若调用SFS API报如下错误: 状态码:403 Forbidden 错误码:SignatureDoesNotMatch 错误信息:The request signature we calculated does not match the signature you provided. Check your key and signing method. 请联系技术支持。 父主题: 认证鉴权