提交 5cc8e3c5 编写于 作者: W wanganxp

修改安全网络文档

上级 055f05e2
# uniCloud 加密网络通道
云端一体安全网络
简介
## 简介
为了避免 `uni-app``uniCloud` 通信时数据被截取和篡改
网络安全的问题很多:
1. 客户端受信。因为过去采用无状态网络通过接口交换数据,客户端的真实性很难保证。
2. 网络抓包,即便是https的请求也会被抓包。
**平台差异说明**
|App|微信小程序|
|:-:|:-:|
|后续支持|3.5.5+|
当攻击者了解了你的服务器接收什么样的数据时,就可以冒名客户端,提交假数据来攻击你的服务器。
尤其当你的业务中涉及促销、返佣、激励视频等场景,非常容易被刷。褥羊毛已经是一个非常成熟的灰产。
## callFunction
```js
uniCloud.callFunction({
name: 'collection',
data: {
name: 'user'
},
secret: 'both'
})
```
当DCloud同时提供了`uni-app``uniCloud`时,事实上具备了提供云端一体的安全网络的能力。
在HBuilderX xx+ ,当开发者同时使用 `uni-app``uniCloud` 时,可以在网络请求时选择是否通过安全网络运行,它通过高安全的保护机制,防止客户端伪造和通信内容抓包。
## 云对象
注意:安全网络不支持web平台,只支持微信小程序和App。并且App的安全级别更高。
```js
uniCloud.importObject('object-name', {
customUI: false,
secret: 'both',
secretMethods: ['login']
})
```
`secret` 属性说明
|值 |描述 |
|:-: |:-: |
|none |不加密,默认值 |
|request |客户端请求时加密数据,服务器下发数据时不加密 |
|response |客户端请求时不加密数据,服务器下发数据时加密 |
|both |客户端和服务器同时加密数据 |
`secretMethods` 需要加密的方法名
## 依赖uniCloud模块
**平台差异说明**
- `uni-id-co` [详情]()
- `uni-open-bridge` [详情]()
|App|微信小程序|
|:-:|:-:|
|后续支持|3.5.5+|
## 开通流程
## App平台
### App平台
后续支持
### 微信小程序
## 微信小程序
1. 下载uni-id插件
在微信小程序上依赖 `access_token``session_key`, `encrypt_key`
- `uni-id-co` [详情]()
2. 下载uni-open-bridge插件
### 流程如下
在微信小程序上依赖 `access_token``session_key`, `encrypt_key`。这些凭据需要`uni-open-bridge`统一接管。
1. 使用 `uni-open-bridge``uni-open-bridge-common` 接管三方开放平台数据,[详情](/uniCloud/uni-open-bridge)
- `uni-open-bridge` [详情]()
2. 在应用的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆
3. 在微信小程序的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆
注意 `uni.checkSession` 有调用次数限制警告,一个 `pv` 可调用 `2`
......@@ -99,17 +72,53 @@ uniCloud.importObject('object-name', {
</script>
```
3. 调用 `uniCloud.callFunction()``uniCloud.importObject`
客户端内部逻辑如下:
## 调用方式
1. 调用 `uniCloud.getCurrentUserInfo()` 检查本地 `uni-id` 用户登陆状态,登陆无效则调用 `uni.login()`,继续使用 `uni-id-co` 调用 `loginByWeixin({ code })`,此过程将同步更新 `uni-open-bridge-common` 保存的数据 `session_key`
2. 调用 `uni.getUserCryptoManager()` 获取加密密钥并通过 `AES` 加密数据,然后发送到 `uniCloud` 服务器
3. 等待服务器响应加密数据到达客户端后解密,回调给开发者
开通配置后,在uni-app客户端调用uniCloud服务器时,可以通过加入secret参数来声明这次请求走安全网络,对传输数据加密。
- callFunction
## 小贴士
客户端通过callFunction调用云函数时,加入secret参数。
```js
uniCloud.callFunction({
name: 'collection',
data: {
name: 'user'
},
secret: 'both'
})
```
安全总是相对的
安全网络是为了防止在设备上安装了受信任证书后 `https` 请求被抓包问题
- 云对象
客户端通过importObject调用云对象时,加入secret和secretMethods参数。
```js
uniCloud.importObject('object-name', {
customUI: false,
secret: 'both',
secretMethods: ['login']
})
```
**secret 属性说明**
|值 |描述 |
|:-: |:-: |
|none |不加密,默认值 |
|request |只加密客户端请求时的上行数据,服务器下发数据不加密 |
|response |客户端请求时不加密数据,只加密服务器下发的数据 |
|both |客户端和服务器上行下行数据都加密数据 |
**secretMethods 属性说明**
`secretMethods` 是云对象中指定需要加密的方法名。因为云对象导入后,调用方法时没有额外指定的方式,所以集中在这里配置。如果不配置,则云对象的所有方法请求时都会加密。
## 小贴士
1. 安全是相对的,没有绝对的安全。
2. 安全是有代价的,加密的数据越庞大,加密和解密的耗时越长。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册