上传及输入步骤均可通过配置进行跳过
- 1个个人主体支持实名认证10个火山引擎账号;1个企业主体支持实名认证100个火山引擎账号。
【账号管理】
进入对应页面【实名认证】
,根据实际情况选择个人或者企业,并填写对应表单或上传相关材料完成实名认证。更多详情,请参考 实名认证用户头像
,单击访问控制
角色
,再点击新建角色
账号
,选择身份选择当前账号
,点击下一步角色名
和其他信息,点击下一步STSAssumeRoleAccess
和CVFullAccess
,点击提交,完成角色创建记录角色名,以备后续流程使用。
身份管理
,并点击用户
,再点击新建用户
通过用户名创建
,输入用户名
并点击下一步完成用户创建管理
,进入管理页面
权限->添加权限
,权限选择STSAssumeRoleAccess
和CVFullAccess
密钥
,再点击新建密钥
,获取到子账户密钥记录密钥(AK/SK),以备后续流程使用。
去创建
,填写相应信息,接入能力勾选 身份认证
,点击创建应用产品服务->身份认证
,确认服务状态已处于 免费试用
中。
正式调用
即可付费调用身份证识别
服务至此,身份认证服务已成功开通完成,前置准备工作已完成,下面将进入接入阶段。
支持两种接入形态:H5、SDK
- H5接入(支持浏览器+小程序+APP):https://www.volcengine.com/docs/6973/1209428
- SDK(IOS+Android)接入详细方案:https://www.volcengine.com/docs/6973/337548
注:H5方案,因抖音限制暂不支持接入抖音小程序,如需接入抖音小程序,可使用抖音实名SDK接入
URL示例:https://h5-v2.kych5.com?accessKeyId=xxx&secretAccessKey=xxx&sessionToken=xxx&configId=xxx&bytedToken=xxx&lng=xxx
OCR上传图片识别
+ 输入身份证号和姓名
+ 人脸认证
OCR上传图片识别
+ 人脸认证
前置调用其他平台OCR
+ 输入身份证号和姓名
+ 人脸认证
前置调用其他平台OCR
+ 人脸认证
输入身份证号和姓名
+ 人脸认证
人脸认证
以下过程以 **仅做人脸认证(活体)
**为例
身份认证提供了多种主流语言接入,包含 Java、Python、Go 等,SDK及签名Demo地址:
使用SDK: (直接搜索Action或ReqKey即可找到对应方法) - Java - Python - Go - php 直接API请求,签名Demo:https://github.com/volcengine/volc-openapi-demos/tree/main/signature
以 Java 为例:
<dependency> <groupId>com.volcengine</groupId> <artifactId>volc-sdk-java</artifactId> <version>最新版本</version> </dependency>
https://www.volcengine.com/docs/6257/86374
获取到 ak、sk、sts_token(即AssumeRole返回的SessionToken)
RoleTrn取值说明:格式为trn:iam::
${AccountId}
:role/
${RoleName}
。其中${AccountId}
需要填入角色所属的主账号ID,${RoleName}
需要填入实际的角色名称。例如账号ID为2000012345的账号内角色名为myRole的角色对应的RoleTrn为trn:iam::
2000012345
:role/
myRole
package com.volcengine.example.sts; import com.alibaba.fastjson.JSON; import com.volcengine.model.request.AssumeRoleRequest; import com.volcengine.model.response.AssumeRoleResponse; import com.volcengine.service.sts.ISTSService; import com.volcengine.service.sts.impl.STSServiceImpl; public class AssumeRoleDemo { public static void main(String[] args) throws Exception { ISTSService stsService = STSServiceImpl.getInstance(); stsService.setAccessKey("your ak"); stsService.setSecretKey("your sk"); AssumeRoleRequest request = new AssumeRoleRequest(); request.setRoleSessionName("just_for_test"); request.setDurationSeconds(900); request.setRoleTrn("trn:iam::yourAccountID:role/yourRoleName"); AssumeRoleResponse resp = stsService.assumeRole(request); System.out.println(JSON.toJSONString(resp)); } }
https://www.volcengine.com/docs/6973/1209467
h5_config.type
:**设置业务场景,此案例取值"3"
,代表直接进入活体认证
liveness_config.ref_source
:比对方式(有源取
"1"
or无源取
"0"
),此案例取值**"1"
**
h5_config.type=="3"
直接做活体才支持无源认证// 完整请求入参示例: { "req_key": "cert_h5_config_init", "h5_config": { "type": "3", "theme_color": "rgba(56, 123, 255, 1)", "show_guide": "1", "show_result": "1", "protocol_name": "测试协议", "protocol_link": "www.volcengine.com", "enable_record": "1", "redirect_url": "www.volcengine.com" }, "liveness_config": { "ref_source": "1", "liveness_type": "motion", "liveness_timeout": 10, "motion_list": [ "0", "1", "2", "3" ], "fixed_motion_list": [ "0" ], "motion_count": 2, "max_liveness_trial": 10 } }
获取"config_id":"64490c8a-c7fa-440d-932b-901718bf0120",有效期15min
package com.volcengine.example.visual; import com.alibaba.fastjson.JSON; import com.volcengine.service.visual.IVisualService; import com.volcengine.service.visual.VisualDefaultClient; import com.volcengine.service.visual.model.request.VisualCertConfigInitRequest; import com.volcengine.service.visual.model.request.VisualCertH5ConfigInitRequest; import com.volcengine.service.visual.model.response.VisualCertConfigInitResponse; import com.volcengine.service.visual.model.response.VisualH5CertConfigInitResponse; public class CertH5ConfigInitDemo { public static void main(String[] args) { //获取IVisualService新实例 //IVisualService visualService = VisualServiceImpl.getInstance(); //获取全局的IVisualService实例 IVisualService visualService = VisualDefaultClient.iVisualService; // call below method if you dont set ak and sk in ~/.vcloud/config visualService.setAccessKey(""); visualService.setSecretKey(""); VisualCertH5ConfigInitRequest request=new VisualCertH5ConfigInitRequest(); request.setReqKey("cert_h5_config_init"); VisualCertH5ConfigInitRequest.H5Config h5Config=new VisualCertH5ConfigInitRequest.H5Config(); h5Config.setType("3"); h5Config.setThemeColor("rgba(56, 123, 255, 1)"); h5Config.setShowGuide("1"); h5Config.setProtocolName("测试协议"); h5Config.setProtocolLink("www.volcengine.com"); h5Config.setEnableRecord("1"); h5Config.setRedirectUrl("www.volcengine.com"); request.setH5Config(h5Config); VisualCertH5ConfigInitRequest.LivenessConfig livenessConfig=new VisualCertH5ConfigInitRequest.LivenessConfig(); livenessConfig.setRefSource("1"); livenessConfig.setLivenessType("motion"); request.setLivenessConfig(livenessConfig); request.setTosConfig(null); request.setCallbackInfo(null); try { VisualH5CertConfigInitResponse response = visualService.certH5ConfigInit(request); System.out.println(JSON.toJSONString(response)); } catch (Exception e) { e.printStackTrace(); } } }
https://www.volcengine.com/docs/6973/1209468
h5_config_id
:第三步生成的套餐ID,confi_ididcard_name
和idcard_no
:身份证姓名及身份证号,有源比对时必须填写ref_image
:基准图Base64,无源比对时必须填写
// 完整请求参数示例: { "req_key":"cert_h5_token", "h5_config_id":"d6f04739-644e-4ff0-axxe-0299a852a2cc", "sts_token":"nCgdqdEROend3.Chxxx", "idcard_name":"xxxx", "idcard_no":"xxx" //"ref_image":"/9xxx" }
"byted_token":"202401312053219F6F6C25DD5C087C5EE9",有效期为60分钟(仅支持认证一次,禁止重复认证)
package com.volcengine.example.visual; import com.alibaba.fastjson.JSON; import com.volcengine.service.visual.IVisualService; import com.volcengine.service.visual.VisualDefaultClient; import com.volcengine.service.visual.model.request.VisualCertTokenRequest; import com.volcengine.service.visual.model.request.VisualH5TokenRequest; import com.volcengine.service.visual.model.response.VisualCertTokenResponse; import com.volcengine.service.visual.model.response.VisualH5TokenResponse; import java.util.ArrayList; public class CertH5TokenDemo { public static void main(String[] args) { //获取IVisualService新实例 //IVisualService visualService = VisualServiceImpl.getInstance(); //获取全局的IVisualService实例 IVisualService visualService = VisualDefaultClient.iVisualService; visualService.setAccessKey(""); visualService.setSecretKey(""); VisualH5TokenRequest visualCertTokenRequest=new VisualH5TokenRequest(); visualCertTokenRequest.setReqKey("cert_h5_token"); visualCertTokenRequest.setH5ConfigId("64490c8a-c7fa-440d-932b-901718bf0120"); visualCertTokenRequest.setStsToken("xxx"); visualCertTokenRequest.setIdcardName("your-name"); visualCertTokenRequest.setIdcardNo("your-id"); //visualCertTokenRequest.setRefImage("/xxxx"); try { VisualH5TokenResponse response = visualService.certH5Token(visualCertTokenRequest); System.out.println(JSON.toJSONString(response)); } catch (Exception e) { e.printStackTrace(); } } }
https://h5-v2.kych5.com?accessKeyId=xxx&secretAccessKey=xxx&sessionToken=xxx&configId=xxx&bytedToken=xxx&lng=xxx
web-view
组件承载H5页面在微信小程序、支付宝小程序环境中,接入身份认证H5增强版比较特殊,需要使用小程序
web-view
组件的方式来承载H5页面。
登录小程序后台 -> 开发管理->开发设置->业务域名(业务自有域名),点击新增,按照要求配置业务域名。
如果有任何问题可以查询相关的文档:微信小程序 web-view 组件 官方文档
无法直接使用身份认证服务提供的h5-v2.kych5.com
域名,因此需要将该域名下的资源转发到可访问的业务域名。
方案一:通过Nginx转发服务
location ^~/ { proxy_set_header Accept-Encoding ""; proxy_set_header Referer "https://h5-v2.kych5.com/"; proxy_pass https://h5-v2.kych5.com/; add_header Access-Control-Allow-Origin *; } nginx
方案二:通过Nodejs转发服务
const express = require("express"); const https = require("https"); const http = require("http"); const fs = require("fs"); const request = require("request"); // 业务域名 const HOST = "xxx.com"; // 目标域名 const TargetHost = "h5-v2.kych5.com"; // 完整域名 const Target = `https://${TargetHost}`; // 读取SSL密钥和签名证书 const options = { cert: fs.readFileSync("./https/cert.pem", "utf8"), key: fs.readFileSync("./https/key.pem", "utf8"), }; // 创建web服务 const app = express(); // 注册https监听 const httpsServer = https.createServer(options, app); // 注册http监听 const httpServer = http.createServer(app); app.use(express.urlencoded({ extended: true })); app.all("*", (req, res) => { const options = { url: `${Target}${req.originalUrl}`, method: req.method, headers: { ...req.headers, host: TargetHost, origin: req.headers.origin ? Target : undefined, referer: req.headers.referer?.replace(HOST, TargetHost), "accept-encoding": undefined, }, form: req.rawHeaders.includes( "application/x-www-form-urlencoded" ) ? req.body : undefined, }; request(options, (err, response, body) => { res.send(body); }) }) // https监听 httpsServer.listen(443, () => { console.log("https://" + HOST); }); // http监听 httpServer.listen(80, () => { console.log("http://" + HOST); });
将生成的H5链接配置到小程序中即可。
当结束认证后,身份认证H5会在redirect_url
地址后面拼接相关的参数,业务侧可解析参数获取认证结果。
/** 拼接示例 **/ ${redirect_url}?resultCode=xxx&algorithmBaseRespCode=xxx&reqMeasureInfoValue=xxx&bytedToken=xxx
认证结束后的回调参数方案
**方案一:**认证结束后将认证结果拼接到redirect_url
参数上,H5内部会调用小程序JS API对应的redirectTo
方法,关闭web-view组件并返回小程序页面(推荐使用)
wxmini:
开头:wxmini:/pages/path1/path2?query1=xx
**方案二:**使用https链接(不建议使用)
redirect_url
参数。redirect_url
页面,由业务侧主动调用小程序API关闭web-view组件。