From 523dbd84dc45e25f060e8d691dba2f7d9b654d33 Mon Sep 17 00:00:00 2001 From: wangyaqi Date: Sat, 8 Oct 2022 20:25:01 +0800 Subject: [PATCH] docs: update secure network --- docs/uniCloud/secure-network.md | 61 ++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/docs/uniCloud/secure-network.md b/docs/uniCloud/secure-network.md index e76536473..6f62e25bc 100644 --- a/docs/uniCloud/secure-network.md +++ b/docs/uniCloud/secure-network.md @@ -29,23 +29,31 @@ DCloud面向开发者同时提供了端引擎`uni-app` 和 云引擎`uniCloud` ### 微信小程序@mp-weixin -安全网络在微信小程序上的实现,依赖了微信提供的一些用户级的凭据。所以需要下载`uni-id`和`uni-open-bridge`,并在app.vue里初始化。 +安全网络在微信小程序上的实现,依赖了微信提供的一些用户级的凭据。所以需要下载`uni-id-pages`和`uni-open-bridge`,并在app.vue里初始化。 -1. 工程中导入uni-id +1. 在[开发者中心](https://dev.dcloud.net.cn/)`应用详情 --> 【名称待定】`内填写微信小程序的appId。一个应用只能有一个发行配置,但是可以有多个开发配置 + + 【图片待补充】 + +2. 在uniCloud控制台关联允许发送安全网络请求的应用 + + 【图片待补充】 + +3. 工程中导入uni-id-pages - `uni-id` [文档](uni-id-summary.md#save-user-token) - `uni-id-co` [插件下载地址](https://ext.dcloud.net.cn/plugin?id=8577) `uni-id-pages`这个插件是云端一体的登录插件,其实安全网络只需要其中的`uni-id-co`云对象。插件中前端登录页面是否使用由开发者自己根据业务决定。 -2. 工程中导入uni-open-bridge插件 +4. 工程中导入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) -3. 配置uni-id和uni-open-bridge +5. 配置uni-id和uni-open-bridge 登陆微信公众平台[https://mp.weixin.qq.com/](https://mp.weixin.qq.com/),获取微信小程序的固定凭据 `appid` 和 `secret`,配置到 uni-id-config @@ -85,9 +93,9 @@ DCloud面向开发者同时提供了端引擎`uni-app` 和 云引擎`uniCloud` 注意:拷贝此文件内容时需要移除 `注释`。标准json不支持注释。在HBuilderX中可用多选`//`来批量移除注释。 -如果项目之前已经使用过uni-id和uni-open-bridge,则上述步骤可省略。 +如果项目之前已经使用过uni-id-pages和uni-open-bridge,则上述步骤可省略。 -4. 在应用的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆 +6. 在应用的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆 注意: [uni.checkSession](https://uniapp.dcloud.net.cn/api/plugins/login.html#uni-checksession) 有调用次数限制警告,一个 `pv` 可调用 `2` 次 @@ -117,15 +125,32 @@ App.vue页面需要补充如下代码: } ``` + +7. 在项目根目录manifest.json文件内为微信小程序平台开启安全网络模块 + + 【图片待补充】 + +### App@app + +App平台安全网络需使用[自定义基座](../tutorial/run/run-app.md#customplayground),App端安全网络不依赖于登录逻辑。 + +1. 在[开发者中心](https://dev.dcloud.net.cn/)`应用详情 --> 证书管理`内填写安卓应用的包名、签名和iOS应用的bundleId。一个应用只能有一个发行证书配置,但是可以有多个开发证书配置 -5. 在manifest中勾选加密模块 -**缺内容?** + 【图片待补充】 +2. 在uniCloud控制台关联允许发送安全网络请求的应用 + + 【图片待补充】 + +3. 在项目根目录manifest.json文件内为app平台开启安全网络模块 + + 【图片待补充】 + ## 调用方式 准备工作完成后,在uni-app客户端调用uniCloud服务器时,可以通过加入secret参数来声明这次请求走安全网络,对传输数据加密。 -- callFunction +### 云函数 客户端通过callFunction调用云函数时,加入secretType参数。 ```js @@ -138,7 +163,7 @@ uniCloud.callFunction({ }) ``` -- 云对象 +### 云对象 客户端通过importObject调用云对象时,通过secretMethods参数来配置每个方法调用时是否加密。 @@ -148,7 +173,7 @@ uniCloud.importObject('object-name', { }) ``` -- clientDB +### clientDB 暂不支持 @@ -170,11 +195,15 @@ uniCloud.importObject('object-name', { 方法级配置优先级最高,例如 `secretMethods: {'*':'response', 'login':'both'}`,login 的 both 覆盖了 `'*':'response'` +**注意** + +- 微信小程序安全网络依赖于登录逻辑,因此在客户端检测到发送安全网络请求时用户未登录时会自动调用uni-id-co的loginByWeixin接口 + ## 服务器端 虽然uni-app客户端和uniCloud云端通信是加密的,但对于开发者而言过程是透明的。 -**不管是客户端接收云端数据、还是云端接受客户端数据,开发者的代码拿到的数据都是加密后的数据。** +**不管是客户端接收云端数据、还是云端接受客户端数据,开发者的代码拿到的数据都是解密后的数据。** 但云端有一个注意事项:为了避免客户端伪造`secretType`获取服务器敏感数据,应以服务器端为准,如果客户端携带的 `secretType` 不符合要求应拒绝响应数据。示例代码如下 @@ -215,7 +244,13 @@ module.exports = { ## 错误码 -**缺内容,客户端错误,服务器解密错误,都应该把错误码列出来?** +|错误码 |说明 |平台 | +|--- |--- |--- | +|ACCOUNT_NOT_EXISTS |用户账号不存在 |微信小程序 | +|OPENID_NOT_FOUND |用户表记录内openid未找到 |微信小程序 | +|GET_ENCRYPT_KEY_FAILED |获取加密key失败 |微信小程序 | + +微信小程序加解密时还会使用uni-id-common的checkToken方法,相关错误码参考:[uni-id错误码](uni-id-summary.md#errcode) ## 小贴士 -- GitLab