Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
程序yang
unidocs-zh
提交
34ba01c0
U
unidocs-zh
项目概览
程序yang
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
34ba01c0
编写于
8月 10, 2022
作者:
d-u-a
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
重写了安全网络
上级
18fd37bf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
40 addition
and
49 deletion
+40
-49
docs/uniCloud/secret-net.md
docs/uniCloud/secret-net.md
+40
-49
未找到文件。
docs/uniCloud/secret-net.md
浏览文件 @
34ba01c0
...
...
@@ -2,7 +2,7 @@
简介
为了避免
`uni
Cloud`
客户端与服务器通信时数据被截取和篡改,
为了避免
`uni
-app`
和
`uniCloud`
通信时数据被截取和篡改
**平台差异说明**
...
...
@@ -12,7 +12,7 @@
|后续支持|3.5.5+|
语法
## callFunction
```
js
uniCloud
.
callFunction
({
...
...
@@ -20,63 +20,65 @@ uniCloud.callFunction({
data
:
{
name
:
'
user
'
},
secret
:
true
// ...
secret
:
'
both
'
})
```
`secret: true`
表示使用加密网络通道,默认为
`false`
## 云对象
## App平台
后续支持
```
js
uniCloud
.
importObject
(
'
object-name
'
,
{
customUI
:
false
,
secret
:
'
both
'
,
secretMethods
:
[
'
login
'
]
})
```
## 微信小程序
`secret`
属性说明
### 简介
|值 |描述 |
|:-: |:-: |
|none |不加密,默认值 |
|request |客户端请求时加密数据,服务器下发数据时不加密 |
|response |客户端请求时不加密数据,服务器下发数据时加密 |
|both |客户端和服务器同时加密数据 |
微信侧维护了一个用户维度的可靠key,用于小程序和后台通信时进行加密和签名。
`secretMethods`
需要加密的方法名
开发者可以分别通过小程序前端和微信后台提供的接口,获取用户的加密 key。
##
# 微信的流程如下
##
依赖uniCloud模块
客户端
-
`uni-id-co`
[
详情
](
)
-
`uni-open-bridge`
[
详情
](
)
1.
在开发者客户端使用
`UserCryptoManager.getLatestUserKey`
获取用户最新的加密密钥信息。
2.
通过
`AES`
和加密密钥加密数据,然后发送到服务器
服务器
## App平台
在开发者服务端,请求微信服务器后台接口
`getUserEncryptKey`
获取用户最近三次的key。在获取 key 的同时,接口会携带 version 信息,开发者可以比较 version 版本来选择使用对应的 key 对数据进行加解密。
后续支持
获取
`getUserEncryptKey`
时需要参数
`openid`
、
`access_token`
、
`session_key`
1.
`access_token`
需要服务器定时刷新并全局缓存
## 微信小程序
2.
`session_key`
在微信客户端通过调用
`wx.login()`
获取
`code`
传递到服务器,在服务器请求微信的服务器换取
`session_key`
,且在客户端任意地方调用
`wx.login()`
后
`session_key`
将失效,
在微信的多个业务中都需要用到
`session_key`
,需要开发者来维护这些值
在微信小程序上依赖
`access_token`
、
`session_key`
,
`encrypt_key`
这些复杂的流程可以通过
`uni-open-bridge`
、
`uni-open-bridge-common`
解决,也无需人工维护,
[
详情
](
/uniCloud/uni-open-bridge
)
###
uniCloud
流程如下
### 流程如下
1.
使用
`uni-open-bridge`
、
`uni-open-bridge-common`
接管三方开放平台数据,
[
详情
](
/uniCloud/uni-open-bridge
)
2.
在应用的生命周期
`onLaunch`
中检查微信登陆状态,如果过期需要登陆
注意
`
wx
.checkSession`
有调用次数限制警告,一个
`pv`
可调用
`2`
次
注意
`
uni
.checkSession`
有调用次数限制警告,一个
`pv`
可调用
`2`
次
```
js
// App.vue
<
script
>
function
checkUserSession
()
{
wx
.
checkSession
({
uni
.
checkSession
({
fail
:
(
err
)
=>
{
wx
.
login
({
uni
.
login
({
success
:
async
({
code
})
=>
{
const
uniIdCo
=
uniCloud
.
importObject
(
'
uni-id-co
'
)
// uniCloud云对象 uni-id-co
await
uniIdCo
.
loginByWeixin
({
code
})
...
...
@@ -97,28 +99,17 @@ uniCloud.callFunction({
<
/script>
```
3.
调用
`uniCloud.callFunction()`
, 且传递参数
`secret: true`
```
js
uniCloud
.
callFunction
({
name
:
'
collection
'
,
data
:
{
name
:
'
user
'
},
secret
:
true
,
success
:
(
res
)
=>
{
console
.
log
(
res
.
result
);
},
fail
:
(
err
)
=>
{
console
.
log
(
err
);
}
})
```
3.
调用
`uniCloud.callFunction()`
或
`uniCloud.importObject`
客户端
`uniCloud.callFunction({ secret: true })`
内部逻辑如下:
客户端内部逻辑如下:
1.
调用
`uniCloud.getCurrentUserInfo()`
检查本地
用户登陆状态,登陆无效则调用
`wx
.login()`
,继续使用
`uni-id-co`
调用
`loginByWeixin({ code })`
,此过程将同步更新
`uni-open-bridge-common`
保存的数据
`session_key`
2.
调用
`
wx.getUserCryptoManager()`
获取加密密钥并通过
`AES`
加密数据,然后发送
`uniCloud`
服务器
1.
调用
`uniCloud.getCurrentUserInfo()`
检查本地
`uni-id`
用户登陆状态,登陆无效则调用
`uni
.login()`
,继续使用
`uni-id-co`
调用
`loginByWeixin({ code })`
,此过程将同步更新
`uni-open-bridge-common`
保存的数据
`session_key`
2.
调用
`
uni.getUserCryptoManager()`
获取加密密钥并通过
`AES`
加密数据,然后发送到
`uniCloud`
服务器
3.
等待服务器响应加密数据到达客户端后解密,回调给开发者
注意:传递参数
`secret: true`
的
`callFunction`
拦截器不会生效,因为需要在内部解密服务器端下发的加密数据
## 小贴士
安全总是相对的
安全网络是为了防止在设备上安装了受信任证书后
`https`
请求被抓包问题
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录