Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Enjoycola_
unidocs-zh
提交
1c976d71
U
unidocs-zh
项目概览
Enjoycola_
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
0
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看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
1c976d71
编写于
2月 22, 2023
作者:
C
chenruilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update uni-id frv doc
上级
de393024
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
494 addition
and
19 deletion
+494
-19
docs/uniCloud/frv/dev.md
docs/uniCloud/frv/dev.md
+313
-2
docs/uniCloud/uni-id-pages.md
docs/uniCloud/uni-id-pages.md
+98
-4
docs/uniCloud/uni-id-summary.md
docs/uniCloud/uni-id-summary.md
+83
-13
未找到文件。
docs/uniCloud/frv/dev.md
浏览文件 @
1c976d71
...
@@ -37,7 +37,7 @@ sequenceDiagram
...
@@ -37,7 +37,7 @@ sequenceDiagram
```
```
-
如果您使用uni-id,那么uni-id-pages已经帮您内置好相关功能,前端页面和云端逻辑均已写好,安全、无需开发、拿来就用。
[
详见
](
待补充
)
-
如果您使用uni-id,那么uni-id-pages已经帮您内置好相关功能,前端页面和云端逻辑均已写好,安全、无需开发、拿来就用。
[
详见
](
/uniCloud/uni-id-summary.md#frv
)
-
如果您的业务系统不在uniCloud上,那么需要在上述流程图中加一个原业务服务器,由云函数和原业务服务器进行token校验、传递认证结果。
-
如果您的业务系统不在uniCloud上,那么需要在上述流程图中加一个原业务服务器,由云函数和原业务服务器进行token校验、传递认证结果。
### 接口防刷
### 接口防刷
...
@@ -368,6 +368,317 @@ module.exports = {
...
@@ -368,6 +368,317 @@ module.exports = {
-
HBuilderX3.7.4+新增支持,标准基座可直接真机运行,打包或自定义基座需在“App模块配置”中勾选“FacialRecognitionVerify(实人认证)”(注意不是faceId)参考
[
详情
](
https://uniapp.dcloud.net.cn/tutorial/app-facialRecognitionVerify.html
)
-
HBuilderX3.7.4+新增支持,标准基座可直接真机运行,打包或自定义基座需在“App模块配置”中勾选“FacialRecognitionVerify(实人认证)”(注意不是faceId)参考
[
详情
](
https://uniapp.dcloud.net.cn/tutorial/app-facialRecognitionVerify.html
)
-
App-Android平台要求
**Android5**
(API Leavel 21)及以上系统,App-iOS平台要求
**iOS9**
及以上系统
-
App-Android平台要求
**Android5**
(API Leavel 21)及以上系统,App-iOS平台要求
**iOS9**
及以上系统
-
App端使用实人认证SDK,需在隐私政策的三方SDK中添加实人认证功能描述,参考
[
详情
](
https://ask.dcloud.net.cn/article/39484#FacialRecognitionVerify
)
-
App端使用实人认证SDK,需在隐私政策的三方SDK中添加实人认证功能描述,参考
[
详情
](
https://ask.dcloud.net.cn/article/39484#FacialRecognitionVerify
)
### 非 uniCloud 业务使用 <Badge text="uni-frv-pages 待发布" />
如果您的业务没有部署在 uniCloud 上,可以通过 uni-frv-pages 来实现实人认证功能。
uni-frv-pages 集成了实名认证前端页面和云端云对象,适用于没有使用uniCloud或没有使用uni-id账号体系的项目。
插件下载地址:
[
https://ext.dcloud.net.cn/plugin?name=uni-frv-pages
](
https://ext.dcloud.net.cn/plugin?name=uni-frv-pages
)
#### 业务流程
```
mermaid
sequenceDiagram
actor client as 客户端
participant cf as 开发者云函数
participant dev as 开发者服务器
participant service as 实人认证服务
client->>+cf: 携带token请求certifyId
cf->>+dev: 请求校验用户id
Note over cf,dev: 开发者需实现用户验证接口<br />供云函数调用
dev-->>-cf: 返回用户id
cf->>+service: 请求certifyId
service-->>-cf: 返回certifyId
Note over client,cf: 云函数存储uid+certifyId+实名信息的关联关系
cf-->>-client: 返回certifyId
client->>+service: 进行实人认证
service-->-client: 返回认证结果
client->>+cf: 请求绑定实名信息
cf->>+service: 请求认证结果
service-->>-cf: 返回认证结果
cf->>+dev: 将用户实名信息、uid发送给开发者服务器
dev-->>-cf: 返回绑定成功或失败
cf-->>-client: 返回绑定成功或失败
```
#### 项目文件说明
```
text
├── uni_modules 存放[uni_module](/uni_modules)规范的插件。
│ ├── uni-frv-pages
│ │ ├── changelog.md
│ │ ├── common 页面公共逻辑
│ │ │ ├── check-id-card.js 校验身份证号合法性
│ │ │ └── common.scss
│ │ ├── components 公共组件
│ │ │ └── uni-frv-pages-realname 实名认证组件
│ │ │ ├── face-verify-icon.svg 实名认证错误提示Icon
│ │ │ └── uni-frv-pages-realname.vue
│ │ ├── package.json 包管理文件
│ │ ├── pages
│ │ │ └── common
│ │ │ └── webview 用于实现应用内浏览或打开《用户协议和隐私协议》URL链接页面
│ │ │ └── webview.vue
│ │ ├── pages_init.json 页面初始化文件
│ │ ├── readme.md
│ │ └── uniCloud
│ │ ├── cloudfunctions
│ │ │ └── uni-frv-co 实名认证云对象
│ │ │ ├── config.js 加载uni-config-center/uni-frv-co.json配置文件
│ │ │ ├── functions 云对象方法目录
│ │ │ │ ├── _after.js 云对象加载后方法
│ │ │ │ ├── _before.js 云对象执行前方法
│ │ │ │ ├── getAuthResult.js 获取实人认证结果
│ │ │ │ ├── getCertifyId.js 获取实人认证认证ID
│ │ │ │ └── index.js 导出云对象方法文件
│ │ │ ├── index.obj.js 云对象入口
│ │ │ ├── lang 国际化目录
│ │ │ │ ├── en.js
│ │ │ │ ├── index.js
│ │ │ │ └── zh-hans.js
│ │ │ ├── lib 云对象公共类库
│ │ │ │ ├── constants.js 变量定义声明文件
│ │ │ │ ├── error.js 错误码
│ │ │ │ ├── request-webhook.js 处理业务服务器回调文件
│ │ │ │ ├── sensitive-aes-cipher.js 敏感信息加解密
│ │ │ │ ├── sign.js 用于给业务服务器回调数据签名
│ │ │ │ ├── utils.js 工具类方法
│ │ │ │ └── validator.js 请求参数校验
│ │ │ └── package.json 包管理文件
│ │ └── database 数据库目录
│ │ └── opendb-frv-logs.schema.json 实人认证记录表
```
#### 配置(uni-frv-co)
实人认证配置文件路径:
`uniCloud/cloudfunctions/common/uni-config-center/uni-frv-pages/config.json`
```
json
//
如果拷贝此内容切记去除注释
{
"callback"
:
{
//
配置业务服务器回调
"userAuth"
:
""
,
//
用户校验
"verifyResult"
:
""
//
认证完成后结果回调
},
"requestTimeout"
:
5000
,
//
请求业务服务器超时时间
"realNameCertifyLimit"
:
5
,
//
限制每个用户每天实人认证次数
"sensitiveInfoEncryptSecret"
:
""
,
//
敏感信息加密密钥(长度需要大于
32
位),敏感信息如:姓名、身份证号、认证照片
"needAlivePhoto"
:
true
,
//
是否需要返回用户人脸照片
"requestAuthSecret"
:
""
//
请求业务服务器时计算签名密钥
}
```
#### 前端使用
将
`uni-frv-pages`
插件导入至项目中,由于
`uni-frv-pages`
提供的实名认证入口是组件形式,需要自行准备实名认证页面,将
`uni-frv-pages-realname`
引入至页面中。
**组件用法**
```
vue
<uni-frv-pages-realname
:agreement=
"{url: '', title: ''}"
token=
"user token"
@
result=
"resultCallback"
></uni-frv-pages-realname>
```
**组件Props**
| 属性名 | 类型 | 默认值 | 说明 |
|-----------|--------|-----|-------------------|
| agreement | Object | - | 隐私协议展示名称与地址,默认不展示 |
| token | String | - | 业务系统的用户id |
**组件Event**
| 事件名称 | 事件说明 | 返回参数 |
|--------|--------|-------------|
| result | 认证成功事件 | 见下方Result说明 |
Result说明
| 参数 | 类型 | 说明 |
|----------|--------|---------------------------------|
| status | number | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
| idCard | string | 用户身份证号码 |
| realName | string | 用户真实姓名 |
**实名认证页面示例**
```
vue
<
template
>
<view
class=
"content"
>
<template
v-if=
"isCertified"
>
<uni-list>
<uni-list-item
class=
"item"
title=
"姓名"
:rightText=
"realName"
></uni-list-item>
<uni-list-item
class=
"item"
title=
"身份证号码"
:rightText=
"idCard"
></uni-list-item>
</uni-list>
</
template
>
<
template
v-else
>
<uni-frv-pages-realname
:agreement=
"agreement"
:token=
"token"
@
result=
"resultCallback"
></uni-frv-pages-realname>
</
template
>
</view>
</template>
<
script
>
export
default
{
data
()
{
return
{
token
:
''
,
agreement
:
{
title
:
"
实名认证协议
"
,
url
:
"
https://www.xxx.com
"
},
isCertified
:
false
,
realName
:
''
,
idCard
:
''
,
}
},
methods
:
{
resultCallback
(
result
)
{
if
(
result
.
status
===
2
)
{
this
.
isCertified
=
true
this
.
realName
=
result
.
realName
this
.
idCard
=
result
.
idCard
}
}
}
}
</
script
>
```
#### 业务回调接口规范
完成整个实名认证流程,需要业务服务器配合提供两个回调接口,用于用户校验与认证结果通知。
为保证请求在网络上传输安全,在请求回调地址时,
`uni-frv-co`
会对请求参数进行签名,开发者在服务器需要验证签名是否正确,不正确的签名可以将请求拒绝。
验证签名操作为开发者主动行为,需要开发者评估是否需要签名验证,不作为强制要求。但强烈建议验证签名以保证安全性。
**概述**
| 请求相关项 | 说明 |
|--------|---------------------------------------------------------------|
| 请求协议 | HTTP/HTTPS,为保证数据安全,建议使用 HTTPS |
| 请求方式 | POST |
| 请求类型 | application/json; charset=utf-8 |
| 校验方式 | uni-frv-co 请求到业务服务器时,开发者应从请求头中获取签名字段进行安全校验,防止数据篡改;签名见下方请求签名说明 |
| 请求超时时间 | 默认超时5秒钟,可在配置文件中配置 |
**请求签名说明**
请在
`uni-frv-co`
配置文件中配置
`requestAuthSecret`
请求鉴权密钥,确保业务服务器与配置文件中的请求鉴权密钥一致。
发起请求时,将使用请求鉴权密钥计算签名,会在 HTTP 请求头中携带以下信息:
| Header | 描述 |
|-------------------|-----------------------------------------------------------------|
| uni-frv-nonce | 随机字符串 |
| uni-frv-timestamp | 当前时间戳; 单位毫秒 |
| uni-frv-signature | 请求鉴权签名; 了解签名算法
[
详见
](
/uniCloud/uni-id-pages.md#http-reqeust-auth
)
|
**用户校验**
以下示例的请求地址均为示例,在实际使用中将更换为业务服务器的回调地址。
HTTP 示例
```
javascript
POST
/
callback
/
userAuth
HTTP
/
1.1
Host
:
xxx
.
com
uni
-
frv
-
nonce
:
x9K3829
uni
-
frv
-
timestamp
:
1676882808550
uni
-
frv
-
signature
:
1
C965267A4A02C6978949C7135215B0A75AEA22B2B84ED491E792365C8269EFA
Content
-
Type
:
application
/
json
Cache
-
Control
:
no
-
cache
{
"
token
"
:
"
test token
"
}
```
Request Body 说明
| 名称 | 类型 | 必须 | 说明 |
|-------|--------|-----|---------------|
| token | string | 是 | 业务系统中的用户token |
Response Body 说明
| 名称 | 类型 | 必须 | 说明 |
|---------|--------|-----|---------------------|
| errCode | string | 是 | 错误码;成功返回0,其他错误返回错误码 |
| errMsg | string | 否 | 错误信息;成功可以为空 |
| uid | string | 是 | 业务系统中的用户id |
**注意**
-
开发者需要严格按照 ResponseBody 格式返回。
**认证结果通知**
以下示例的请求地址均为示例,在实际使用中将更换为业务服务器的回调地址。
HTTP 示例
```
javascript
POST
/
callback
/
verifyResult
HTTP
/
1.1
Host
:
xxx
.
com
uni
-
frv
-
nonce
:
x9K3829
uni
-
frv
-
timestamp
:
1676882808550
uni
-
frv
-
signature
:
1
C965267A4A02C6978949C7135215B0A75AEA22B2B84ED491E792365C8269EFA
Content
-
Type
:
application
/
json
Cache
-
Control
:
no
-
cache
{
"
uid
"
:
"
test uid
"
,
"
realName
"
:
"
张三
"
,
"
idCard
"
:
'
10xxxxxxxxxx
'
,
"
photo
"
:
"
...
"
,
"
status
"
:
2
}
```
Request Body 说明
| 名称 | 类型 | 必须 | 说明 |
|----------|--------|-----|---------------------------------|
| uid | string | 是 | 业务系统中的用户id |
| realName | string | 是 | 真实姓名 |
| idCard | string | 是 | 身份证号码 |
| photo | string | 是 | 用户认证照片;needAlivePhoto为true时返回 |
| status | string | 是 | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
Response Body 说明
| 名称 | 类型 | 必须 | 说明 |
|----------|--------|-----|---------------------|
| errCode | string | 是 | 错误码;成功返回0,其他错误返回错误码 |
| errMsg | string | 否 | 错误信息;成功可以为空 |
| realName | string | 否 | 真实姓名 |
| idCard | string | 否 | 身份证号 |
**注意**
-
开发者需要严格按照
`ResponseBody`
格式返回。
-
如果有敏感数据脱敏需求,可以在响应中返回脱敏后的真实姓名和身份证号。
#### 回调接口签名验证
**nodejs示例**
```
javascript
function
verify
(
body
,
signature
,
timestamp
,
nonce
)
{
const
timeout
=
30
*
1000
// 请求超过30秒不能再请求,防止重放攻击
const
bodyStr
=
Object
.
keys
(
body
)
.
sort
()
.
filter
(
item
=>
typeof
body
[
item
]
!==
'
object
'
)
.
map
(
item
=>
`
${
item
}
=
${
body
[
item
]}
`
)
.
join
(
'
&
'
)
if
(
isNaN
(
Number
(
timestamp
))
||
(
Number
(
timestamp
)
+
timeout
)
<
Date
.
now
())
{
throw
{
errCode
:
"
ILLEGAL_REQUEST
"
}
}
const
reSignature
=
crypto
.
createHmac
(
'
sha256
'
,
`
${
requestAuthSecret
+
nonce
}
`
).
update
(
`
${
timestamp
}${
bodyStr
}
`
).
digest
(
'
hex
'
)
if
(
signature
!==
reSignature
.
toUpperCase
())
{
throw
{
errCode
:
"
ILLEGAL_REQUEST
"
}
}
return
true
}
```
其他语言参考
[
签名算法
](
/uniCloud/uni-id-pages.md#http-reqeust-auth
)
自行实现签名验证逻辑
docs/uniCloud/uni-id-pages.md
浏览文件 @
1c976d71
...
@@ -1528,6 +1528,40 @@ await uniIdCo.getInvitedUser({
...
@@ -1528,6 +1528,40 @@ await uniIdCo.getInvitedUser({
-
仅在用户token即将过期时返回新newToken
-
仅在用户token即将过期时返回新newToken
#### 获取账户实名信息(脱敏)@get-realname-info <Badge text="uni-id-pages 1.1.2+" />
接口名:getRealNameInfo
**接口形式**
```
js
await
uniIdCo
.
getRealNameInfo
({
decryptData
})
```
**参数说明**
|参数名 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|decryptData |boolean |否 |是否解密数据;默认:true|
**返回值**
| 参数名 | 类型 | 说明 |
|-------------|---------------------|-----------------------------------|
| errCode | string
|
number | 错误码 |
| errMsg | string | 错误信息 |
| type | number | 用户类型:0 个人用户 1 企业用户 |
| authStatus | number | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
| realName | string | 姓名(脱敏);用户类型为 0 时返回 |
| identity | string | 身份证号码(脱敏);用户类型为 0 时返回 |
**注意**
在uni-id-pages中默认启用敏感数据加解密,如果开发者没有使用uni-id提供的
[
敏感信息加密
](
uniCloud/uni-id-summary.md#sensitive-info-encrypt
)
功能,请将
`decryptData`
参数改为
`false`
,返回原始信息
### 安全验证@verifier
### 安全验证@verifier
#### 创建图形验证码@create-captcha
#### 创建图形验证码@create-captcha
...
@@ -2008,7 +2042,7 @@ await uniIdCo.updateUserInfoByExternal({
...
@@ -2008,7 +2042,7 @@ await uniIdCo.updateUserInfoByExternal({
|-- |-- |-- |-- |
|-- |-- |-- |-- |
|uid |string |否 |uni-id体系的用户Id;与externalUid 二选一 |
|uid |string |否 |uni-id体系的用户Id;与externalUid 二选一 |
|externalUid |string |否 |自身系统的用户id;与 uid 二选一 |
|externalUid |string |否 |自身系统的用户id;与 uid 二选一 |
| username | string |
否
| 用户名 |
| username | string |
是
| 用户名 |
| password | string | 否 | 密码 |
| password | string | 否 | 密码 |
| nickname | string | 否 | 昵称 |
| nickname | string | 否 | 昵称 |
| authorizedApp | Array
<
string
>
| 否 | 允许登录的app列表 |
| authorizedApp | Array
<
string
>
| 否 | 允许登录的app列表 |
...
@@ -2025,6 +2059,67 @@ await uniIdCo.updateUserInfoByExternal({
...
@@ -2025,6 +2059,67 @@ await uniIdCo.updateUserInfoByExternal({
| errCode | string
|
number | 错误码 |
| errCode | string
|
number | 错误码 |
| errMsg | string | 错误信息 |
| errMsg | string | 错误信息 |
### 实名认证 <Badge text="待发布" />
#### 获取认证ID@get-frv-certify-id
接口名:getFrvCertifyId
**接口形式**
```
js
await
uniIdCo
.
getFrvCertifyId
({
realName
,
idCard
,
metaInfo
})
```
**参数说明**
| 参数名 | 类型 | 必填 | 说明 |
|------------|------------|-----|---------------------|
| realName | string | 是 | 用户真实姓名 |
| idCard | string | 是 | 用户身份证号码 |
| metaInfo | String | 是 | 客户端初始化时返回的metaInfo |
**返回值**
|参数名 |类型 |说明 |
|-- |-- |-- |
|errCode |string
|
number |错误码 |
|errMsg |string |错误信息 |
|certifyId |object |认证Id;用于客户端调用认证接口及云函数获取认证结果 |
#### 获取认证结果@get-frv-auth-result
接口名:getFrvAuthResult
**接口形式**
```
js
await
uniIdCo
.
getFrvAuthResult
({
certifyId
})
```
**参数说明**
|参数名 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|certifyId |string |是 |认证Id |
**返回值**
| 参数名 | 类型 | 说明 |
|---------------|---------------------|----------------------------------------------------------------------------|
| errCode | string
|
number | 错误码 |
| errMsg | string | 错误信息 |
| authStatus | number | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
| realName | string | 姓名(脱敏);
[
敏感信息加密参考
](
/uniCloud/uni-id-summary.md#sensitive-info-encrypt
)
|
| identity | string | 身份证号码(脱敏);
[
敏感信息加密参考
](
/uniCloud/uni-id-summary.md#sensitive-info-encrypt
)
|
### 其他功能@extra-function
### 其他功能@extra-function
### 覆盖或新增校验规则@custom-validator
### 覆盖或新增校验规则@custom-validator
...
@@ -2241,7 +2336,7 @@ exports.main = async (event, context) => {
...
@@ -2241,7 +2336,7 @@ exports.main = async (event, context) => {
## URL化请求鉴权签名@http-reqeust-auth
## URL化请求鉴权签名@http-reqeust-auth
uni-id 在URL化请求时,会对以下 API 进行调用鉴权验证,
uni-id 在URL化请求时,会对以下 API 进行调用鉴权验证,
在调用 API 时,开发者需要使用请求鉴权密钥
`requestAuthSecret`
按照 uni-id 的约定方式对请求中的关键数据进行签名值计算,
在调用 API 时,开发者需要使用请求鉴权密钥
(详见
[
配置文件
](
/uniCloud/uni-id-summary.md#config
)
)
`requestAuthSecret`
按照 uni-id 的约定方式对请求中的关键数据进行签名值计算,
并将签名值添加到Header请求头的
`uni-id-signature`
参数中传给 uni-id 进行签名验证,uni-id 会对接收到数据进行签名值计算,
并将签名值添加到Header请求头的
`uni-id-signature`
参数中传给 uni-id 进行签名验证,uni-id 会对接收到数据进行签名值计算,
并与接收到的请求签名值进行比对,如果签名值不一致,则视为无效签名,将拒绝本次请求。
并与接收到的请求签名值进行比对,如果签名值不一致,则视为无效签名,将拒绝本次请求。
...
@@ -2250,7 +2345,6 @@ uni-id 在URL化请求时,会对以下 API 进行调用鉴权验证,
...
@@ -2250,7 +2345,6 @@ uni-id 在URL化请求时,会对以下 API 进行调用鉴权验证,
|---|
|---|
|externalRegister|
|externalRegister|
|externalLogin|
|externalLogin|
|updateUserInfoByExternal|
### 请求头公共参数
### 请求头公共参数
...
@@ -2279,7 +2373,7 @@ class Sign {
...
@@ -2279,7 +2373,7 @@ class Sign {
getSignature
(
params
,
nonce
,
timestamp
)
{
getSignature
(
params
,
nonce
,
timestamp
)
{
const
paramsStr
=
this
.
getParamsString
(
params
)
const
paramsStr
=
this
.
getParamsString
(
params
)
const
signature
=
crypto
.
createHmac
(
'
sha256
'
,
`
${
this
.
requestAuthSecret
}${
nonce
}
`
).
update
(
`
${
timestamp
}${
paramsStr
}
`
).
digest
(
'
hex
'
)
const
signature
=
crypto
.
createHmac
(
'
sha256
'
,
`
${
requestAuthSecret
}${
nonce
}
`
).
update
(
`
${
timestamp
}${
paramsStr
}
`
).
digest
(
'
hex
'
)
return
signature
.
toUpperCase
()
return
signature
.
toUpperCase
()
}
}
...
...
docs/uniCloud/uni-id-summary.md
浏览文件 @
1c976d71
...
@@ -208,6 +208,10 @@ uni-id的云端配置文件在`uniCloud/cloudfunctions/common/uni-config-center/
...
@@ -208,6 +208,10 @@ uni-id的云端配置文件在`uniCloud/cloudfunctions/common/uni-config-center/
"passwordErrorRetryTime"
:
3600
,
//
密码错误重试次数超限之后的冻结时间
"passwordErrorRetryTime"
:
3600
,
//
密码错误重试次数超限之后的冻结时间
"autoSetInviteCode"
:
false
,
//
是否在用户注册时自动设置邀请码,默认不自动设置
"autoSetInviteCode"
:
false
,
//
是否在用户注册时自动设置邀请码,默认不自动设置
"forceInviteCode"
:
false
,
//
是否强制用户注册时必填邀请码,默认为
false
"forceInviteCode"
:
false
,
//
是否强制用户注册时必填邀请码,默认为
false
"idCardCertifyLimit"
:
1
,
//
实名认证相关;
限制每个身份证可以绑定几个账号
"realNameCertifyLimit"
:
5
,
//
实名认证相关;
限制用户每日认证次数,防止接口被刷
"sensitiveInfoEncryptSecret"
:
""
,
//
敏感信息加密密钥(长度需要大于
32
位),如使用实名认证功能需配置此密钥
"frvNeedAlivePhoto"
:
false
,
//
实名认证相关;是否获取认证照片
"app"
:
{
//
如果你使用旧版本uni-id公共模块而不是uni-id-common这里可能配置的是app-plus,务必注意调整为app
"app"
:
{
//
如果你使用旧版本uni-id公共模块而不是uni-id-common这里可能配置的是app-plus,务必注意调整为app
"tokenExpiresIn"
:
2592000
,
"tokenExpiresIn"
:
2592000
,
"tokenExpiresThreshold"
:
864000
,
"tokenExpiresThreshold"
:
864000
,
...
@@ -334,10 +338,10 @@ uni-id-co 与 uni-id-pages 内的前端页面均支持这四个内置规则
...
@@ -334,10 +338,10 @@ uni-id-co 与 uni-id-pages 内的前端页面均支持这四个内置规则
|支付宝小程序端登录 |配置
`mp-alipay.oauth.alipay`
,在支付宝开放平台获取:
[
支付宝开放平台
](
https://openhome.alipay.com/develop/manage
)
|
|支付宝小程序端登录 |配置
`mp-alipay.oauth.alipay`
,在支付宝开放平台获取:
[
支付宝开放平台
](
https://openhome.alipay.com/develop/manage
)
|
|Apple APP端登录 |配置
`app.oauth.apple`
,在Apple开发者中心自行配置:
[
Apple开发者中心
](
https://developer.apple.com/account/resources/identifiers/list
)
|
|Apple APP端登录 |配置
`app.oauth.apple`
,在Apple开发者中心自行配置:
[
Apple开发者中心
](
https://developer.apple.com/account/resources/identifiers/list
)
|
## token令牌@token
## token令牌@token
::: warning 注意
::: warning 注意
如需保持活跃客户端的登录状态,请勿将token有效期设置一个很大的值,具体如何实现请参考:
[
保持客户端登录状态
](
#keep-client-login-state
)
如需保持活跃客户端的登录状态,请勿将token有效期设置一个很大的值,具体如何实现请参考:
[
保持客户端登录状态
](
#keep-client-login-state
)
:::
:::
首先解释下token的概念。token是服务器颁发给客户端的一个令牌。
首先解释下token的概念。token是服务器颁发给客户端的一个令牌。
...
@@ -943,7 +947,7 @@ module.exports = {
...
@@ -943,7 +947,7 @@ module.exports = {
|uni-id-token-expired |登陆状态失效,token已过期 |- |
|uni-id-token-expired |登陆状态失效,token已过期 |- |
|uni-id-check-token-failed |token校验未通过 |- |
|uni-id-check-token-failed |token校验未通过 |- |
|uni-id-account-exists |账户已存在 |- |
|uni-id-account-exists |账户已存在 |- |
|uni-id-account-not-exists |账户不存在 |- |
|uni-id-account-not-exists |账户不存在 |- |
|uni-id-account-not-exists-in-current-app| 匹配到的用户不可在当前应用登录 |
|uni-id-account-not-exists-in-current-app| 匹配到的用户不可在当前应用登录 |
|uni-id-account-conflict |用户账号冲突 |可能会由开发者手动更新数据库导致,正常情况下不应出现 |
|uni-id-account-conflict |用户账号冲突 |可能会由开发者手动更新数据库导致,正常情况下不应出现 |
|uni-id-account-banned |此账号已封禁 |- |
|uni-id-account-banned |此账号已封禁 |- |
...
@@ -1046,14 +1050,14 @@ exports.main = async function(event, context){
...
@@ -1046,14 +1050,14 @@ exports.main = async function(event, context){
}]
}]
```
```
## 其他功能
## 其他功能
### token更新及保持客户端登录状态@keep-client-login-state
### token更新及保持客户端登录状态@keep-client-login-state
一般来说token的有效期不会无限长,示例配置内web端token有效期为2小时,微信小程序为3天,app端为30天。你可以回忆一下你所用的软件,只要每天都打开就一直不需要重新登录,这样就牵扯到保持客户端的登录状态的问题。
一般来说token的有效期不会无限长,示例配置内web端token有效期为2小时,微信小程序为3天,app端为30天。你可以回忆一下你所用的软件,只要每天都打开就一直不需要重新登录,这样就牵扯到保持客户端的登录状态的问题。
uni-id使用了判断token剩余有效时间小于一定的阈值(配置文件内的tokenExpiresThreshold)但是大于0时自动下发新token的逻辑来保证活跃客户端一直处于登录状态,返回新token的逻辑由checkToken方法实现。具体该将token有效期和token刷新阈值设置为多少,需要根据多数用户软件使用频率来确定。
uni-id使用了判断token剩余有效时间小于一定的阈值(配置文件内的tokenExpiresThreshold)但是大于0时自动下发新token的逻辑来保证活跃客户端一直处于登录状态,返回新token的逻辑由checkToken方法实现。具体该将token有效期和token刷新阈值设置为多少,需要根据多数用户软件使用频率来确定。
举个例子,开发者配置的token有效期(tokenExpiresIn)为1天,token刷新阈值(tokenExpiresThreshold)为8小时。用户在0点0分0秒获取了token,如果用户在16点后(token有效期已小于8小时)调用接口时执行了checkToken方法则会返回新token。
举个例子,开发者配置的token有效期(tokenExpiresIn)为1天,token刷新阈值(tokenExpiresThreshold)为8小时。用户在0点0分0秒获取了token,如果用户在16点后(token有效期已小于8小时)调用接口时执行了checkToken方法则会返回新token。
### 裂变@fission
### 裂变@fission
...
@@ -1557,3 +1561,69 @@ module.exports = {
...
@@ -1557,3 +1561,69 @@ module.exports = {
在
[
uniCloud 控制台
](
https://unicloud.dcloud.net.cn/
)
,找到 uni-id 所在的服务空间,在云数据库中选中
`uni-id-users`
表,点击导入按钮,上传用户数据json文件即可。
在
[
uniCloud 控制台
](
https://unicloud.dcloud.net.cn/
)
,找到 uni-id 所在的服务空间,在云数据库中选中
`uni-id-users`
表,点击导入按钮,上传用户数据json文件即可。
[
从文件中导入数据说明
](
https://uniapp.dcloud.net.cn/uniCloud/hellodb.html#import
)
[
从文件中导入数据说明
](
https://uniapp.dcloud.net.cn/uniCloud/hellodb.html#import
)
### 实名认证@frv <Badge text="待发布" />
基于
[
实人认证
](
/uniCloud/frv/intro.md
)
服务实现,可以实现用户刷脸核验真实身份,完成实名认证。
使用此功能前需要先开通实人认证服务,服务开通流程,
[
详见
](
/uniCloud/frv/service.md
)
uni-id-pages 中内置了实名认证页面
`uni-id-pages/pages/userinfo/realname-verify/realname-verify`
。
<div
style=
"display: flex; flex-basis: 10px"
>
<div
style=
"margin-right: 10px;"
>
<img
src=
"https://web-assets.dcloud.net.cn/unidoc/zh/202302072124001.jpg"
width=
"375"
/>
</div>
<div
style=
"margin-right: 10px;"
>
<img
src=
"https://web-assets.dcloud.net.cn/unidoc/zh/202302071745119.jpg"
width=
"375"
/>
</div>
<div>
<img
src=
"https://web-assets.dcloud.net.cn/unidoc/zh/202302222009563.jpg"
width=
"375"
/>
</div>
</div>
如没有实名认证需求,可以将实名认证相关页面注释:
1.
在
`uni-id-pages/pages/userinfo/userinfo`
页面中,注释掉实名认证的
`uni-list-item`
标签。
2.
在
`pages.json`
中注释掉实名认证页面
`uni_modules/uni-id-pages/pages/userinfo/realname-verify/realname-verify`
。
#### 配置项说明
实名认证相关配置项如下,配置文件路径
`uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json`
,详细的uni-id配置文件
[
参考
](
#config
)
| 字段 | 类型 | 默认值 | 说明 |
|----------------------------|---------|-------|-----------------------------------------------------------|
| idCardCertifyLimit | number | 1 | 限制每个身份证可以绑定几个账号 |
| realNameCertifyLimit | number | 5 | 限制用户每日认证次数,防止接口被刷 |
| sensitiveInfoEncryptSecret | string | | 敏感信息加密密钥(长度需要大于32位); 见下方
[
敏感信息加密
](
#sensitive-info-encrypt
)
|
| frvNeedAlivePhoto | boolean | false | 是否获取认证照片 |
**注意**
-
如果设置了
`frvNeedAlivePhoto`
参数,用户认证照片会加密后存储至云存储,
[
敏感信息加密参考
](
#sensitive-info-encrypt
)
#### 接口参考
-
获取认证服务的 certifyId
[
uniIdCo.getFrvCertifyId
](
uniCloud/uni-id-pages.md#get-frv-certify-id
)
-
使用 certifyId 获取认证结果
[
uniIdCo.getFrvAuthResult
](
uniCloud/uni-id-pages.md#get-frv-auth-result
)
-
获取用户实名信息(脱敏)
[
uniIdCo.getRealNameInfo
](
uniCloud/uni-id-pages.md#get-realname-info
)
#### 敏感信息加密@sensitive-info-encrypt
用户的姓名、身份证号、实人认证照片属于用户隐私信息,为了防止隐私信息泄露,在数据存储上使用了对称加密
`aes-256-cbc`
算法对数据进行加密。
在前端页面需要使用时,例如”
[
获取用户实名信息
](
uniCloud/uni-id-pages.md#get-realname-info
)
“接口,只会返回脱敏后的数据,减少暴露风险,提高安全性。
由于加密密钥
`sensitiveInfoEncryptSecret`
来源于
`config.json`
配置文件,强烈建议更换为自定义的字符串,不要使用默认的密钥。
密钥长度最少需要32位,密钥越长破解难度越高,但不宜过长,推荐设置为32-128位之间。
实人认证照片将会上传至云存储中,阿里云与腾讯云存储路径如下:
-
阿里云
`/{uid}.b64`
-
腾讯云
`/user/id-card/{uid}.b64`
注意:文件不是图片不可直接下载打开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录