华为云用户手册

  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 status String 登录流程状态标识,返回SUC CES S表示登录成功。 session_token String 用户session_token,可使用该token调用单点登录接口获取sso_ticket,通过sso_ticket可以获取用户信息。 id_token String 本质上是一个JWT Token,包含了用户身份信息,默认2小时有效,支持可配置。 expire Integer session_token有效期,单位为秒,有效期内可以使用session_token获取ticket。 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误详情。
  • 请求示例 社交账号登录绑定手机号。绑定手机号为12345678901,接收到的验证码为123456。 POST https://{domain_name}/api/v2/sdk/social/bind X-operating-sys-version: Android 10 X-device-fingerprint: 156aysdna213sac X-device-ip: 10.10.10.1 X-agent: Mozilla/5.0 (Linux; Android 10; Redmi K30 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36 X-L: zh X-client-id: DRrYIqauawN0I8myTMoDTPys6ezGZxnm X-state-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... X-tenant-id: 08f770f51f80d2f40f38c00cb199fd21 { "mobile": "12345678901", "verify_code": "123456" }
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 X-operating-sys-version 是 String 调用方操作系统版本,例如:Android 10。 X-device-fingerprint 是 String 调用方设备指纹,例如:156aysdna213sc50。 X-device-ip 否 String 调用方IP,例如:10.10.10.1。 X-agent 是 String 用户Agent信息,例如:Mozilla/5.0 (Linux; Android 10; Redmi K30 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36。 X-L 否 String 用于国际化语言设置,例如:zh。 X-client-id 是 String 应用标识,注册应用后分配的ClientId。 X-state-token 是 String 临时令牌。当认证源配置为绑定时,用于社交账号绑定手机号操作,需要传入对应的state_token,绑定成功返回用户session_token,绑定失败返回失败信息。 X-tenant-id 否 String 租户id,ISV应用调用则为必填,需要将{domain_name}换成ISV通用 域名 {common_domain},请求Header参数中需要指定对应租户的tenant_id,并将X-client-id换成ISV应用模板的client_id。 表2 请求Body参数 参数 是否必选 参数类型 描述 mobile 是 String 接收验证码的手机号。 verify_code 是 String 接收到的验证码。
  • 请求示例 创建组织,组织名子部门,组织编码1000001,父组织编码20210623103509267-6ABA-201FFC...,组织类型部门。 POST https://{domain_name}/api/v2/tenant/organizations Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "code": "1000001", "name": "子部门", "parent_id": "20210623103509267-6ABA-201FFC...", "category": "department" }
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表2 请求Body参数 参数 是否必选 参数类型 描述 code 是 String 组织编码,可输入中英文、数字、下划线和中划线。 最大长度:64 name 是 String 组织名称,所在层级下唯一,可输入中英文、数字、空格、中划线、下划线和&。 最大长度:100 parent_id 否 String 父组织id。创建父组织,不需要传递;创建子组织,需要传递。 category 否 String 组织类型。 缺省值:department:部门 枚举值: department:部门 company:公司 unit:科 group:组
  • URI GET /api/v1/oauth2/authorize 表1 Query参数 参数 是否必选 参数类型 描述 response_type 是 String 授权类型,固定值:code。 client_id 是 String 应用标识,注册应用后,分配的ClientId。 scope 否 String 授权范围 ,固定值:get_user_info。 redirect_uri 否 String 成功授权后的回调地址,地址可以是注册应用时填写的回调地址,也可以是注册应用时填写的回调地址的域名,建议配置为应用的首页或者应用的用户中心。注意需要对uri进行URLEncode处理。 state 否 String 应用的状态值。可用于防止 CS RF攻击,成功授权后回调应用时会原样带回,应用用它校验认证请求与回调请求的对应关系。可以包含字母和数字。
  • 请求示例 获取OAuth2.0授权码。授权类型为固定值code,配置应用注册时生成的clientId,成功授权后的回调地址为https://example.com,授权范围为固定值get_user_info。 GET https://{domain_name}/api/v1/oauth2/authorize?response_type=code&client_id=NzZeWuiJa91dPSRdZQChMazIh13AW...&redirect_uri=https://example.com&scope=get_user_info&state=test
  • 请求示例 根据应用id删除应用侧角色成员,应用侧角色id为20220420144449385-C66D-E8C1D1D79,应用账号id集合为["20220415171558023-84A4-ED5C390B8", "20220414163425614-2FD6-CA9B208BE"]。 DELETE https://{domain_name}/api/v2/tenant/applications/{application_id}/role-member Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "role_id": "20220420144449385-C66D-E8C1D1D79", "account_Ids": [ "20220415171558023-84A4-ED5C390B8", "20220414163425614-2FD6-CA9B208BE" ] }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表3 请求Body参数 参数 是否必选 参数类型 描述 role_id 是 String 角色id。 account_Ids 是 Array of strings 应用账号id集合,最大50条。
  • 请求示例 获取凭据,根据应用的clientid以及clientsecret获取接口鉴权token。 POST https://{domain_name}/api/v2/tenant/token Content-Type: application/x-www-form-urlencoded client_id=ONtQq2igSggfFClyGgzmuXR8ubWEP...& client_secret=XdqUmJpG19hNEHz3472XsPcwvfe...& grant_type=client_credentials
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 access_token String 认证凭据,用于调用管理API。 token_type String 认证凭据类型。固定值:Bearer。 expires_in Integer 过期时间。单位为秒,默认1800s。 scope String 获取的Access Token授权访问范围。 id_token String 授权访问id_token。 状态码: 400 表3 响应Body参数 参数 参数类型 描述 error_code String 错误编号。 error_msg String 错误详情。
  • 请求示例 用户授权应用账号,在应用application_id中创建名为Test01的应用账号。 POST https://{domain_name}/api/v2/tenant/users/{user_id}/applications/{application_id}/accounts Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "account_name":"Test01" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表3 请求Body参数 参数 是否必选 参数类型 描述 account_name 否 String 对用户授权应用,在应用中创建的应用账号名,可选参数,为空默认为用户名。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表3 请求Body参数 参数 是否必选 参数类型 描述 code 否 String 组织编码,组织编码为空时默认不修改,可输入中英文、数字、下划线和中划线。 最大长度:64 name 否 String 组织名称,组织名称为空时默认不修改,可输入中英文、数字、空格、中划线、下划线和&。 最大长度:100 parent_id 否 String 父组织id。 category 否 String 组织类型。 缺省值:department:部门 枚举值: department:部门 company:公司 unit:科 group:组
  • 请求示例 修改组织信息,组织编码为TestOrg,组织名为测试机构,父组织为根组织,组织类型为部门。 PUT https://{domain_name}/api/v2/tenant/organizations/{org_id} Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "code": "TestOrg", "name": "测试机构", "parent_id": "", "category": "department" }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表3 请求Body参数 参数 是否必选 参数类型 描述 password 是 String 新密码。 old_password 是 String 原密码。
  • 请求示例 校验原密码修改用户密码。 PUT https://{domain_name}/api/v2/tenant/users/{user_id}/change-password-verify Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "password":"N******8", "old_password":"O******4" }
  • 请求示例 根据应用id和机构id修改机构属性,名称为开发组,父机构id为20201027162527852-B712-D040F4...。 PUT https://{domain_name}/api/v2/tenant/applications/{application_id}/organizations/{org_id} Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "name":"开发组", "parent_id":"20201027162527852-B712-D040F4..." }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表3 请求Body参数 参数 是否必选 参数类型 描述 name 否 String 机构名称,为空时默认不修改,可输入中英文、数字、空格、中划线、下划线和&。 最大长度:100 parent_id 否 String 父机构id。
  • 请求示例 创建指定应用的应用账号并关联指定用户,账号名为zhangshan,账号名称为zs,关联用户的user_id为20220331164602949-904C-D475B60AE,应用账号为启用状态。 POST https://{domain_name}/api/v2/tenant/applications/{application_id}/accounts/basic-account Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "account_name":"zhangsan", "user_id":"20220331164602949-904C-D475B60AE", "name":"zs", "org_code":"", "password":"", "disabled":false, "extension":{} }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表3 请求Body参数 参数 是否必选 参数类型 描述 user_id 是 String 应用账号关联的授权用户id。 account_name 否 String 应用账号名,为空默认为用户名。 name 否 String 应用账号名称。 org_code 否 String 应用机构编码。 password 否 String 应用账号密码。 disabled 否 Boolean 应用账号是否禁用,为空默认为非禁用。 extension 否 Object 自定义扩展属性,需要在应用“对象模型”—“应用账号模型”自定义。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 Authorization 是 String 认证凭据,值:Bearer {access_token},access_token通过“获取访问凭据”接口获取。 表3 请求Body参数 参数 是否必选 参数类型 描述 offset 是 Integer 第几页。 最小值:0 limit 是 Integer 每页多少条。 最小值:10 最大值:100
  • 请求示例 根据应用id和角色id分页查询应用侧角色成员列表,返回查询结果前10条数据,如不满10条,则返回实际数量的结果。 GET https://{domain_name}/api/v2/tenant/applications/{application_id}/role-member-list/{role_id} Authorization: Bearer 334963fc-1e4a-473b-9096-52a929140... { "offset": "0", "limit": "10", }
  • 响应示例 状态码: 200 请求成功。 { "total" : 1, "offset" : 0, "limit" : 10, "role_members" : [ { "id" : "20220210090626329-AFAE-EB2862B3A", "account_name" : "adminAcc", "account_type" : "1", "name" : "管理员", "org_id" : "20220210135202250-92C8-D89EC88C6", "disabled" : false, "extension" : null } ] }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 total Integer 总数 offset Integer 第几页 limit Integer 每页多少条 role_members Array of RoleMemberInfo objects 角色成员信息集合 表5 RoleMemberInfo 参数 参数类型 描述 id String 应用账号id account_name String 应用账号名 name String 应用账号名称 org_id String 应用机构id disabled Boolean 是否禁用 account_type String 应用账号类型 extension Object 自定义扩展属性 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误编号。 error_msg String 错误详情。
  • 请求示例 发送短信验证码,给指定手机号12345678901用于绑定手机号,图形验证码校验通过凭证为71d******635---{"x":237.0,"y":5.0}。 POST https://{domain_name}/api/v2/sdk/sms/send X-operating-sys-version: Android 10 X-device-fingerprint: 156aysdna213sac X-device-ip: 10.10.10.1 X-agent: Mozilla/5.0 (Linux; Android 10; Redmi K30 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36 X-L: zh X-client-id: DRrYIqauawN0I8myTMoDTPys6ezGZxnm X-tenant-id: 08f770f51f80d2f40f38c00cb199fd21 { "mobile": "12345678901", "type": "BIND_MOBILE_ SMS ", "captcha_token": "71d******635---{\"x\":237.0,\"y\":5.0}" }
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 X-operating-sys-version 是 String 调用方操作系统版本,该参数只用来记录日志,不做校验。例如:Android 10。 X-device-fingerprint 是 String 调用方设备指纹,该参数只用来记录日志,不做校验。例如:156aysdna213sc50。 X-device-ip 否 String 调用方IP,该参数只用来记录日志,不做校验。例如:10.10.10.1。 X-agent 是 String 用户Agent信息,该参数只用来记录日志,例如:Mozilla/5.0 (Linux; Android 10; Redmi K30 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36。 X-L 否 String 用于国际化语言设置,支持中文和英文。例如:zh。 X-client-id 是 String 应用标识,注册应用后分配的ClientId。该值可参考通用信息获取。 X-tenant-id 否 String 租户id,ISV应用调用则为必填,需要将{domain_name}换成ISV通用域名{common_domain},请求Header参数中需要指定对应租户的tenant_id,并将X-client-id换成ISV应用模板的client_id。 说明: 此参数只用于ISV应用,当前该应用暂未开放,若需要,请提交工单申请开通。 表2 请求Body参数 参数 是否必选 参数类型 描述 mobile 是 String 手机号,只能由数字组成,且长度为11位。 type 是 String 短信发送的场景,该参数用来设置在以下哪种场景下收到验证码。 枚举值: REGISTER_SMS:注册短信 LOG IN_SMS:登录短信 FORGET_PWD_SMS:找回密码短信 BIND_MOBILE_SMS:绑定短信 UPDATE_MOBILE_SMS:修改手机号短信 OTP_REST_SMS:二次认证短信 captcha_token 是 String 图形验证码校验通过的凭证。该参数获取方式参考校验图形验证码。
  • 业务场景说明 自建MQTT Broker基于MQTT协议的上行数据和下行指令的业务定义如下: 表1 业务场景 业务场景 通信Topic 报文Payload 设备上报数据 /aircondition/data/up { "temperature": 26.0 } 服务端控制指令 /aircondition/cmd { "switch": "off" } 设备使用一机一密的认证方式。 设备通过Topic上报数据,通过消息流转功能将数据转发到后端服务。 服务端通过消息下发接口下发消息给设备。
  • 2.设备端域名切换 完成平台端配置后,需要进行设备端业务开发。完整的设备开发流程可参考设备侧开发。本章节以Paho-MQTT开源MQTT客户端为例,介绍在设备迁移场景下,设备侧如何在只修改接入地址的情况下,实现设备建立MQTT连接、Topc订阅、消息发布等功能。 //接入华为云IoT的域名,在控制台的"总览"界面的"平台接入地址"中获取“设备侧”的MQ TTS 接入地址。 String server = "ssl://******.st1.iotda-device.cn-north-4.myhuaweicloud.com:8883"; // Paho MQTT客户端。 MqttClient myMqttClient = new MqttClient(server, "myClientId", persistence); // Paho MQTT连接参数。 MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); connOpts.setKeepAliveInterval(120); connOpts.setUserName("myUserName"); connOpts.setPassword("myPassword".toCharArray()); myMqttClient.connect(connOpts); System.out.println("Broker: " + broker + " Connected"); // Paho MQTT消息订阅。 myMqttClient.subscribe("/aircondition/cmd", new MyMessageListener()); // Paho MQTT发布消息。 String topic = "/aircondition/data/up"; String content = "{\"temperature\": 26.0 }"; MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(0); myMqttClient.publish(topic, message);
  • 模拟数据上报及结果验证 使用MQTT模拟器连接到平台(模拟器使用请参考:使用MQTT.fx调测)。 使用模拟器进行消息上报,详情请参考:设备消息上报。 上报内容如下: { "age": "34", "profession": "blue-collar", "maritalStatus": "single", "educationalStatus": "tertiary", "realEstateSituation": "no", "loanStatus": "tertiary" } 查看HTTP服务器是否收到预测结果。 图17 查看消息
共100000条