华为开放平台鉴权

本文转载自华为开发者联盟


  1. 概述
      开放平台采用OAuth2.0协议作为第三方应用提供用户接入服务。OAuth2.0是一个开放授权协议,它可以使第三方应用在不获取用户的用户名和密码的前提下,访问用户授权的资源。OAuth2.0协议规范,可访问官方网站

  2. 流程
    1) 创建应用,获取client_id和client_secret。
    2) 客户端应用向华为OAuth2.0服务发起一个授权请求。
    3) 华为OAuth2.0服务向用户展示一个授权页面,提醒用户客户端应用需要获取用户的哪些信息。
    4) 用户授权客户端应用后,可获得一个access_token
    5) 通过access_token,客户端应用可以通过华为Open Api访问用户授权的数据。

  3. Access Token 获取方式

注意:目前access_token的有效期通过返回的expires_in来传达,access_token的有效时间可能会在未来有调整。access_token在有效期内尽量复用,业务要根据这个有效时间提前去申请新access_token即可。如果业务频繁申请access_token,可能会被流控。业务在API调用获知access_token已超时的情况下(NSP_STATUS=6,详细错误列表),可以触发access_token的申请流程。

Implicit Grant
又称User-Agent Flow,适用于所有无Server端配合的应用(桌面客户端需要内嵌浏览器),可以访问与用户相关的Open API
这里写图片描述

Client Credentials
即通过应用的密钥获取Access Token,适用于任何类型应用。
注意:通过此方式获取的access_token,仅可以访问与用户无关的Open API
这里写图片描述


3.1
Implicit Grant方式获取access_token
获取access_token
请求格式
可通过浏览器访问

https://login.vmall.com/oauth2/authorize

参数:
client_id:必选,申请应用时获得的应用 ID。
response_type:必选 ,此时必须为”token”
redirect_uri:必选,授权后要回调的URI,access token会附在URI上。
scope:可选,Access Token的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)并只列出基础服务。
state:可选,授权服务器在回调时(重定向用户浏览器到“redirect_uri”时),会在uri中原样回传该参数。OAuth2.0标准协议建议,利用state参数来防止CSRF攻击。
display:可选,用户授权页面,目前支持page、dialog、tvDialog、mobile,系统默认显示display=page的页面。
举例:

https://login.vmall.com/oauth2/authorize?
  response_type=token&
  client_id=12345&
  redirect_uri=http%3A%2F%2Fwww.abc.com%2Fredirect%2Foauth2

响应格式
access_token:要获取的Access Token;
expires_in:Access Token的有效期,以秒为单位;
scope:Access Token的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限);
state:请求中的参数,原样返回

HTTP/1.1 302 Found
Location:
http://www.abc.com/redirect/oauth2#access_token=BFEsZqBuaW%5C%2F%5C%2F9GGn1mLt%2BKykzfBObIy6V3eN20ufoNiAERl33oVGzlN5TE5qeA%3D%3D&expires_in=86400

错误响应
error:错误码。
error_description:错误描述信息,用来帮助理解和解决发生的错误。
state:请求中的参数,原样返回

HTTP/1.1 302 Found
Location:
http://www.abc.com/redirect/oauth2#error=access_denied&error_description=user%20didnot%20allow%20your%20authorization%20request

3.2
Client Credentials方式获取access_token
获取access_token
请求格式

https://login.vmall.com/oauth2/token

参数:
grant_type:必选 ,此时必须为”client_credentials”
client_id:必选,申请应用时获得的应用 ID。
client_secret:必选,申请应用时获得的应用密钥。
scope:可选,以空格分隔的权限列表,若不传递此参数,默认权限包括(nsp.auth nsp.user nsp.vfs nsp.ping openpush.message)

POST /oauth2/token HTTP/1.1
  Host: login.vmall.com
  Content-Type: application/x-www-form-urlencoded
  grant_type=client_credentials&client_id=12345&client_secret=bKaZ0VE3EYrXaXCdCe3d2k9few

响应格式
access_token:要获取的Access Token;
expires_in:Access Token的有效期,以秒为单位;
scope:Access Token的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限);
举例:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
  "access_token": "BFEsZqBuaW\/\/9GGn1mLt+KykzfBObIy6V3eN20ufoNiAERl33oVGzlN5TE5qeA==",
  "expires_in": 86400,
}

错误响应
error:错误码。
error_description:错误描述信息,用来帮助理解和解决发生的错误。

HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
  "error": "invalid_code",
  "error_description": "The code is invalid"
}
### 华为云物联网平台与微信小程序集成 #### 平台概述 华为云物联网(IoT)平台提供了一套完整的解决方案来连接、管理和分析来自各种IoT设备的数据。通过该平台可以实现设备数据采集、远程控制等功能[^1]。 #### 微信小程序接入方式 对于希望将华为云IoT平台上管理的设备状态展示给最终用户的开发者来说,可以通过微信小程序的形式向用户提供服务接口。具体而言,这涉及到几个关键技术环节: - **API调用**:利用HTTP RESTful API或者WebSocket协议访问华为云提供的开放能力; - **消息推送机制**:当有新的事件发生时(比如传感器读数更新),能够及时通知到前端应用; - **安全认证体系**:确保每一次请求都是合法有效的,并保护敏感信息不被泄露; #### 实现步骤详解 ##### 获取Token用于操作 在发起任何针对华为云资源的操作前都需要先获取临时访问凭证即token。此过程涉及到了OAuth2.0授流程中的Client Credentials Grant模式,在实际编程过程中可通过发送POST请求至`https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens`完成身份验证并获得返回的有效期较短的安全令牌字符串作为后续所有交互的基础。 ```bash curl -X POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens \ -H "Content-Type: application/json;charset=utf8" \ -d '{ "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "<your_username>", "domain": {"id": "default"}, "password": "<your_password>" } } }, "scope": { "project": { "name": "cn-north-4" } } } }' ``` ##### 订阅产品下的指定属性变化通知 为了让微信端能实时接收到特定条件触发的消息提醒,需要设置好相应的订阅关系。这里以MQTT为例说明如何监听某类别的最新动态。首先应该创建一个Topic Filter表达式用来匹配感兴趣的主题路径,之后再将其注册成为正式成员即可开始接收广播过来的信息流了。 ```javascript // 假设已经成功建立了mqtt客户端实例client const topicFilter = `devices/${deviceId}/properties/report`; await client.subscribe(topicFilter); console.log(`Subscribed to ${topicFilter}`); ``` ##### 构建简易版UI界面供用户浏览查询结果 最后一步就是设计美观大方又易于使用的图形化面板啦!考虑到跨平台兼容性的需求以及快速迭代的优势所在,推荐采用WePY框架构建整个项目结构。它不仅继承了Vue.js优秀的双向绑定特性而且还额外增加了许多专属于移动互联网场景下特有的组件库支持,极大地方便了初学者入门学习的同时也提高了生产效率[^2]。 ```html <template> <view class="container"> <!-- 展示当前温度计数值 --> <text>{{ temperature }}</text> <!-- 控制灯光开关按钮 --> <button @click="toggleLight">Toggle Light</button> </view> </template> <script> export default { data() { return { temperature: null, lightStatus: false, }; }, methods: { async toggleLight() { const newState = !this.lightStatus; await this.$http.post('/api/device/control', { action: 'switch-light', state: newState }); this.lightStatus = newState; }, // 定义其他业务逻辑... } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值