提交 b00c45c8 编写于 作者: DCloud_Heavensoft's avatar DCloud_Heavensoft

Update secret-net.md

上级 6b96bbd6
云端一体安全网络
**云端一体安全网络**
> HBuilderX 3.6.2+ 支持
## 简介
......@@ -11,9 +13,9 @@
尤其当你的业务中涉及促销、返佣、激励视频等场景,非常容易被刷。褥羊毛已经是一个非常成熟的灰产。
当DCloud同时提供了`uni-app``uniCloud`时,事实上具备了提供云端一体的安全网络的能力。
DCloud面向开发者同时提供了端引擎`uni-app` 和 云引擎`uniCloud`,其实可以提供云端一体的安全网络的能力。
在HBuilderX 3.6.2+ ,当开发者同时使用 `uni-app``uniCloud` 时,可以在网络请求时选择是否通过安全网络运行,它通过高安全的保护机制,防止客户端伪造和通信内容抓包。
`uni-app` 连接 `uniCloud` 时,可以选择是否启动安全网络。它通过高安全的保护机制,防止客户端伪造和通信内容抓包。
注意:安全网络不支持web平台,只支持微信小程序和App。并且App的安全级别更高。
......@@ -23,30 +25,38 @@
|:-:|:-:|
|后续支持|3.6.2+|
## 开通流程
## 准备工作
### 微信小程序
### App平台
安全网络在微信小程序上的实现,依赖了微信提供的一些用户级的凭据。所以需要下载`uni-id``uni-open-bridge`,并在app.vue里初始化。
后续支持
1. 工程中导入uni-id
### 微信小程序
- `uni-id` [文档](uni-id-summary.md#save-user-token)
- `uni-id-co` [插件下载地址](https://ext.dcloud.net.cn/plugin?id=8577)
1. 下载uni-id插件
`uni-id-pages`这个插件是云端一体的登录插件,其实安全网络只需要其中的`uni-id-co`云对象。插件中前端登录页面是否使用由开发者自己根据业务决定。
- `uni-id-co` [详情](/uniCloud/uni-id-summary.html#save-user-token)
2. 工程中导入uni-open-bridge插件
2. 下载uni-open-bridge插件
安全网络在微信小程序上依赖了微信的 `access_token``session_key``encrypt_key`等凭据。这些凭据需要`uni-open-bridge`统一接管。
在微信小程序上依赖 `access_token``session_key`, `encrypt_key`。这些凭据需要`uni-open-bridge`统一接管。
- `uni-open-bridge` [文档](https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge.html)
- `uni-open-bridge` [插件下载地址](https://ext.dcloud.net.cn/plugin?id=9002)
- `uni-open-bridge` [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge.html)
3. 配置uni-id和uni-open-bridge
3. 在应用的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆
**缺内容,说清楚从微信小程序后台取哪些凭据,填到哪里?**
如果项目之前已经使用过uni-id和uni-open-bridge,则上述步骤可省略。
4. 在应用的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆
注意: [uni.checkSession](https://uniapp.dcloud.net.cn/api/plugins/login.html#uni-checksession) 有调用次数限制警告,一个 `pv` 可调用 `2`
App.vue页面需要补充如下代码:
```js
// App.vue
<script>
function checkUserSession() {
uni.checkSession({
......@@ -72,40 +82,62 @@
</script>
```
5. 在manifest中勾选加密模块
**缺内容?**
## 调用方式
开通配置后,在uni-app客户端调用uniCloud服务器时,可以通过加入secret参数来声明这次请求走安全网络,对传输数据加密。
准备工作完成后,在uni-app客户端调用uniCloud服务器时,可以通过加入secret参数来声明这次请求走安全网络,对传输数据加密。
- callFunction
客户端通过callFunction调用云函数时,加入secret参数。
客户端通过callFunction调用云函数时,加入secretType参数。
```js
uniCloud.callFunction({
name: 'collection',
data: {
name: 'user'
},
secretType: 'both'
secretType: 'both' //both指上下行数据都加密,具体见下
})
```
- 云对象
客户端通过importObject调用云对象时,加入secret和secretMethods参数
客户端通过importObject调用云对象时,通过secretMethods参数来配置每个方法调用时是否加密
```js
uniCloud.importObject('object-name', {
customUI: false,
secretMethods: {'login':'both'}
})
```
**clientDB呢?**
**secretType 属性说明**
|值 |描述 |
|:-: |:-: |
|none |不加密,默认值 |
|request |只加密客户端请求时的上行数据,服务器下发数据不加密 |
|response |客户端请求时不加密数据,只加密服务器下发的数据 |
|both |客户端和服务器上行下行数据都加密数据 |
**secretMethods 属性说明**
`secretMethods` 是云对象中指定需要加密的方法名。可对每个方法配置,例如: `secretMethods: {'login':'both'}`,指定 `login` 方法的 `secretType` 为 both
## 服务器端
为了避免客户端伪造参数获取服务器敏感数据,应以服务器端为准,如果客户端携带的 `secretType` 不符合要求应拒绝响应数据
虽然uni-app客户端和uniCloud云端通信是加密的,但对于开发者而言过程是透明的。
- callFunction
**不管是客户端接收云端数据、还是云端接受客户端数据,开发者的代码拿到的拿到的数据都是加密后的数据。**
但云端有一个注意事项:为了避免客户端伪造`secretType`获取服务器敏感数据,应以服务器端为准,如果客户端携带的 `secretType` 不符合要求应拒绝响应数据。示例代码如下
- 云函数中验证secretType
在云函数的context中有secretType。
```js
exports.main = async (event, context) => {
......@@ -118,7 +150,9 @@ exports.main = async (event, context) => {
}
```
- 云对象
- 云对象中验证secretType
在云对象的this中有secretType。
```js
module.exports = {
......@@ -136,24 +170,11 @@ module.exports = {
}
```
## 错误码
**secretType 属性说明**
|值 |描述 |
|:-: |:-: |
|none |不加密,默认值 |
|request |只加密客户端请求时的上行数据,服务器下发数据不加密 |
|response |客户端请求时不加密数据,只加密服务器下发的数据 |
|both |客户端和服务器上行下行数据都加密数据 |
**secretMethods 属性说明**
`secretMethods` 是云对象中指定需要加密的方法名。可对每个方法配置,例如: `secretMethods: {'login':'both'}`,指定 `login` 方法的 `secretType` 为 both
**缺内容,客户端错误,服务器解密错误,都应该把错误码列出来?**
## 小贴士
1. 安全是相对的,没有绝对的安全。
2. 安全是有代价的,加密的数据越庞大,加密和解密的耗时越长。
\ No newline at end of file
2. 安全是有代价的,加密的数据越庞大,加密和解密的耗时越长。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册