Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
程序yang
unidocs-zh
提交
cf754caf
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看板
提交
cf754caf
编写于
8月 11, 2022
作者:
d-u-a
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
uni-open-bridge、secret 补充缺失内容
上级
47f9aae8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
94 addition
and
61 deletion
+94
-61
docs/uniCloud/secret-net.md
docs/uniCloud/secret-net.md
+8
-8
docs/uniCloud/uni-open-bridge.md
docs/uniCloud/uni-open-bridge.md
+86
-53
未找到文件。
docs/uniCloud/secret-net.md
浏览文件 @
cf754caf
...
...
@@ -13,7 +13,7 @@
当DCloud同时提供了
`uni-app`
和
`uniCloud`
时,事实上具备了提供云端一体的安全网络的能力。
在HBuilderX
xx
+ ,当开发者同时使用
`uni-app`
和
`uniCloud`
时,可以在网络请求时选择是否通过安全网络运行,它通过高安全的保护机制,防止客户端伪造和通信内容抓包。
在HBuilderX
3.5.5
+ ,当开发者同时使用
`uni-app`
和
`uniCloud`
时,可以在网络请求时选择是否通过安全网络运行,它通过高安全的保护机制,防止客户端伪造和通信内容抓包。
注意:安全网络不支持web平台,只支持微信小程序和App。并且App的安全级别更高。
...
...
@@ -41,7 +41,7 @@
-
`uni-open-bridge`
[
详情
](
)
3.
在
微信小程序
的生命周期
`onLaunch`
中检查微信登陆状态,如果过期需要登陆
3.
在
应用
的生命周期
`onLaunch`
中检查微信登陆状态,如果过期需要登陆
注意
`uni.checkSession`
有调用次数限制警告,一个
`pv`
可调用
`2`
次
...
...
@@ -106,12 +106,12 @@ uniCloud.importObject('object-name', {
**secret 属性说明**
|值 |描述 |
|:-: |:-: |
|none |不加密,默认值 |
|request |只加密客户端请求时的上行数据,服务器下发数据不加密
|
|response |客户端请求时不加密数据,只加密服务器下发的数据
|
|both |客户端和服务器上行下行数据都加密数据
|
|值 |描述
|
|:-: |:-:
|
|none |不加密,默认值
|
|request |只加密客户端请求时的上行数据,服务器下发数据不加密 |
|response |客户端请求时不加密数据,只加密服务器下发的数据
|
|both |客户端和服务器上行下行数据都加密数据 |
**secretMethods 属性说明**
...
...
docs/uniCloud/uni-open-bridge.md
浏览文件 @
cf754caf
# uni-open-bridge
`uni-open-bridge`
是统一接管微信等三方平台认证凭据(包括但不限于
`access_token`
、
`session_key`
、
`ticket`
)的开源库。
`uni-open-bridge`
是统一接管微信等三方平台认证凭据(包括但不限于
`access_token`
、
`session_key`
、
`
encrypt_key`
、
`
ticket`
)的开源库。
## 背景
调用微信等三方开放平台时,涉及众多凭据。有的是固定凭据,没有有效期。有的是临时凭据,会在一定时间或一定操作后失效。
尤其是临时凭据,比如微信的
`access_token`
、
`session_key`
、
`
ticket`
(乱啊,下面的api是4个。多了
`user_key`
、
`encrypt_key`
,少了
`session_key`
,
**xxx**
)
, 开发者需要动态从微信服务器获取,统一保存。
尤其是临时凭据,比如微信的
`access_token`
、
`session_key`
、
`
encrypt_key`
、
`ticket`
, 开发者需要动态从微信服务器获取,统一保存。
但实际上这里面的坑很多:
...
...
@@ -27,13 +27,13 @@
`uni-open-bridge`
包括:
1.
一个云对象
`uni-open-bridge`
2.
一个公共模块
`uni-open-bridge-common`
3.
配套的数据库,表名为
**xxx**
。在redis中的key为
**xxx**
3.
配套的数据库,表名为
`opendb-open-data`
。在redis中的key格式为
`uni-id:[dcloudAppid]:[platform]:[openid]:[access-token|user-key|encrypt-key-version|ticket]`
`uni-open-bridge`
系统中,有一个同名云对象
`uni-open-bridge`
,它默认就是定时运行的,在package.json中配置了每小时定时运行一次(部署线上系统生效)。
该云对象根据在
`uni-config-center`
中
**xxx**
位置配置的
**xxx**
,从而有权定时向微信服务器发请求,将获取到的
**xxx**
保存到数据库
**xxx**
中。
该云对象根据在
`uni-config-center`
中
`mp-weixin`
或
`web`
节点位置配置的
`appid`
和
`secret`
,从而有权定时向微信服务器发请求,将获取到的
`access_token`
或
`ticket`
保存到数据库
`opendb-open-data`
表
中。
当所在服务空间开通redis时,还会缓存在redis的key
**xxx**
中
。这会让系统性能更好。
当所在服务空间开通redis时,还会缓存在redis的key。这会让系统性能更好。
上述获取到微信的各种临时凭据后,当各个业务代码需要这些凭据时,通过如下方式获取。
...
...
@@ -45,22 +45,71 @@
<img
src=
"/svg/uni-open-bridge.svg"
></img>
## 使用
1.
**下载插件[
]()**
到项目中。
1.
**
下载插件
[
uni-open-bridge
](
https://ext.dcloud.net.cn/plugin?id=9002
)
到项目中。
2.
在
`uni-config-center`
的
**xxx**
地方配置固定凭据
**xxx**
2.
在
`uni-config-center`
的
`uni-id`
下配置固定凭据
`appid`
和
`secret`
首先向微信的
[
公众平台
](
https://mp.weixin.qq.com/
)
申请
`appid`
和
`secret`
固定凭据
然后在项目的 uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json 文件中配置
首先向微信的哪里申请xx固定凭据
然后在项目的
**xxx**
目录下配置xxx
**示例代码**
3.
在
`uni-config-center`
目录下新建子目录
`uni-open-bridge`
, 新增
`config.json`
,配置
**xxx**
```
json
//
uni-config-center/uni-id/config.json
{
"dcloudAppid"
:
"__UNI__xxxxxx"
,
//
在项目的
manifest.json
中
"mp-weixin"
:
{
"tokenExpiresIn"
:
259200
,
"oauth"
:
{
"weixin"
:
{
"appid"
:
""
,
//
微信公众平台申请的小程序
appid
"appsecret"
:
""
//
微信公众平台申请的小程序
secret
}
}
},
"web"
:
{
"oauth"
:
{
"h5-weixin"
:
{
"appid"
:
""
,
//
微信公众平台申请的公众号
appid
"appsecret"
:
""
//
微信公众平台申请的公众号
secret
}
}
}
}
```
示例代码
注意:拷贝此文件内容时需要移除
`注释`
3.
在
`uni-config-center`
目录下新建子目录
`uni-open-bridge`
, 新增
`config.json`
,配置 dcloudAppid ,详情见下面的示例代码
**示例代码**
```
json
//
uni-config-center/uni-open-bridge/config.json
{
"schedule"
:
{
"__UNI__xxxxxx"
:
{
//
dcloudAppid
,
需要和
`uni-config-center`
uni-id中的配置一致
"enable"
:
true
,
//
任务全局开关,优先级最高
"mp-weixin"
:
{
//
平台,目前仅支持
微信小程序、微信
H
5
,详情参见
https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge#platform
"enable"
:
true
,
//
当前平台任务开关
"tasks"
:
[
"accessToken"
]
//
要执行的任务,微信小程序支持
accessToken
},
"h5-weixin"
:
{
"enable"
:
false
,
"tasks"
:
[
"ticket"
]
//
支持微信
H
5
ticket,因
ticker
依赖微信
H
5
accessToken,内部自动先获取
accessToken。此处的
accessToken
和微信小程序的
accessToken
不是一个值
}
}
},
"ipWhiteList"
:
[
"0.0.0.0"
]
//
用于
http
调用的服务器IP白名单
}
```
注意:拷贝此文件内容时需要移除
`注释`
4.
将插件上传到服务空间。最好开通redis,会有更好的性能
然后在数据库和redis的
**xxx**
中会看到数据。
然后在数据库和redis的
`uni-id`
分组
中会看到数据。
如果异常,请在
**xxx**
检查运行日志。很可能是第一步或第二步的配置出错了。
如果异常,请在
[
uniCloud Web控制台
](
https://unicloud.dcloud.net.cn/
)
,找到云函数/云对象
`uni-open-bridge`
检查运行日志。很可能是第一步或第二步的配置出错了。
## 业务系统获取相关凭据的方法
...
...
@@ -107,8 +156,7 @@
const
{
getAccessToken
,
setAccessToken
,
removeAccessToken
setAccessToken
}
=
require
(
'
uni-open-bridge-common
'
)
exports
.
main
=
async
(
event
,
context
)
=>
{
...
...
@@ -127,14 +175,6 @@ exports.main = async (event, context) => {
// 读取 (redis / 数据库)
let
result1
=
await
getAccessToken
(
key
)
// 删除
await
removeAccessToken
(
key
)
// 删除后读取, 返回 null
let
result2
=
await
getAccessToken
(
key
)
console
.
log
(
result2
)
// null
return
null
};
```
...
...
@@ -170,8 +210,7 @@ exports.main = async (event, context) => {
const
{
getUserKey
,
setUserKey
,
removeUserKey
,
setUserKey
}
=
require
(
'
uni-open-bridge-common
'
)
exports
.
main
=
async
(
event
,
context
)
=>
{
...
...
@@ -191,14 +230,6 @@ exports.main = async (event, context) => {
// 读取 (redis / 数据库)
let
result1
=
await
getUserKey
(
key
)
// 删除
await
removeUserKey
(
key
)
// 删除后读取, 返回 null
let
result2
=
await
getUserKey
(
key
)
console
.
log
(
result2
)
// null
return
null
};
```
...
...
@@ -237,8 +268,7 @@ exports.main = async (event, context) => {
const
{
getEncryptKey
,
setEncryptKey
,
removeEncryptKey
setEncryptKey
}
=
require
(
'
uni-open-bridge-common
'
)
exports
.
main
=
async
(
event
,
context
)
=>
{
...
...
@@ -260,13 +290,6 @@ exports.main = async (event, context) => {
// 读取 (redis / 数据库)
let
result1
=
await
getEncryptKey
(
key
)
// 删除
await
removeEncryptKey
(
key
)
// 删除后读取, 返回 null
let
result2
=
await
getEncryptKey
(
key
)
console
.
log
(
result2
)
// null
return
null
};
```
...
...
@@ -301,8 +324,7 @@ exports.main = async (event, context) => {
const
{
getTicket
,
setTicket
,
removeTicket
setTicket
}
=
require
(
'
uni-open-bridge-common
'
)
exports
.
main
=
async
(
event
,
context
)
=>
{
...
...
@@ -321,14 +343,6 @@ exports.main = async (event, context) => {
// 读取 (redis / 数据库)
let
result1
=
await
getTicket
(
key
)
// 删除
await
removeTicket
(
key
)
// 删除后读取, 返回 null
let
result2
=
await
getTicket
(
key
)
console
.
log
(
result2
)
// null
return
null
};
```
...
...
@@ -413,6 +427,25 @@ https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/getUserK
}
```
#### getEncryptKey
Url
```
https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/getEncryptKey
```
参数
```
json
{
"dcloudAppid"
:
"__UNI__xxx"
,
"platform"
:
"mp-weixin"
,
"openid"
:
""
,
"version"
:
1
//
此版本号应根据客户端传递的版本号
}
```
#### getTicket
...
...
@@ -466,7 +499,7 @@ https://xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx.bspapp.com/uni-open-bridge/getTicke
开发者如果遇到因为
`session_key`
不正确而校验签名失败或解密失败,请关注下面几个与
`session_key`
有关的注意事项。
`uni.login`
调用时,用户的
`session_key`
可能会被更新而致使旧
`session_key`
失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用
uni.login
,并非每次调用都导致
`session_key`
刷新)。
`uni.login`
调用时,用户的
`session_key`
可能会被更新而致使旧
`session_key`
失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用
`uni.login`
,并非每次调用都导致
`session_key`
刷新)。
开发者应该在明确需要重新登录时才调用
`uni.login`
,及时通过
`code2Session`
接口更新服务器存储的
`session_key`
。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录