企业 APP 接入专题
国家网络身份认证公共服务接入讲解
接入流程与实务答疑
注册申请 / 材料填报 / 技术对接 / 联调上线
键盘← / → 切换页面,F 键全屏左右滑动切换页面鼠标移动至右下角呼出菜单
接入初衷
甬易数为何接入国家身份认证平台
-
01
合规保障
在满足实名要求的同时,遵循《个人信息保护法》“最小必要”原则。
-
02
数据安全
减少身份证等敏感信息在自有服务器的明文留存,降低隐私泄露风险。
-
03
成本优化
减少第三方身份核验及敏感数据存储支出,降低平台运营成本。
-
04
用户体验
简化认证流程,降低操作门槛,减轻用户对隐私泄露的顾虑。
甬易数研发成果
从甬易数研发到 Flutter 认证插件
w_client_flutter 由赖海波在甬易数研发中衍生开发,基于国家网络身份认证平台 iOS、Android SDK。
统一两端认证流程
专利申请将认证发起、完成后返回应用及结果获取统一为完整流程,减少 iOS、Android 分别适配的复杂度。
补足 Flutter 认证适配能力
提供可复用的认证入口与结果反馈,兼顾取消、超时等情况,减少重复开发,让团队更专注业务体验。
沉淀甬易数研发价值
甬易数对跨平台兼容与认证体验的扎实投入,沉淀为独立插件和专利申请成果,夯实产品基础,也为后续项目留下可复用的技术积累。
发明专利申请公开文本
CN 121842676 A一种基于国家网络身份认证APP的跨平台身份认证接口抽象方法及系统
接入路径
接入全流程总览
企业办理事项与平台审批节点
-
01
注册与准备
- 需求确认
- 平台注册
- 申请材料准备
明确场景,备齐材料
-
02
申请与审批
- 服务申请与接入初审
- 需求、技术、合规评估
- 资料审批
- 接入审批
提交申请,完成审批
-
03
技术接入与联调
- 发起联调与证书制作
- 安全接入与前后端对接
- 联调测试
完成对接,验证链路
-
04
生产开通
- 生产开通准备
- 开通生产线
- 确认开通正式服务
确认开通,投入使用
接入准备
认证前的必要资质确认
-
01
营业执照
确认已取得营业执照,备齐企业主体资质材料。
-
02
软件著作权
准备拟接入 APP 对应的软件著作权登记证书。
-
03
APP 上架
确认 APP 已正式上架,可在应用商店检索到应用详情页。
机构信息填报
机构简介与信息返回范围
1、机构基本情况(必填):机构性质,持牌照情况,为个人/企业提供什么服务等。
2、主要应用客户端情况(必填):如,机构旗下有三款 App(**甲、**乙、**丙),一个官方网站(**网上系统),小程序(ABC、DEF),线下网点等。
3、技术能力(可选):如拥有自主研发能力,研发团队人数等。
4、安全管理(可选):如法规方面,技术方面(如等保三级)。
5、其他需要介绍的情况(可选)。
1、机构基本情况:示例科技有限公司为企业,开展网络游戏研发与运营,面向个人用户提供游戏服务。持牌情况为[实际许可名称及编号]。
2、主要应用客户端情况:旗下“示例游戏 APP”已上架应用商店,服务范围包括游戏账号实名注册、登录及在线游戏。
3、技术能力:由自有技术团队负责游戏客户端、服务端开发及认证接口对接。
4、安全管理:按最小必要性原则处理信息,落实用户授权、访问控制与数据保护。
5、其他情况:为在实名注册时判断用户是否成年、实施未成年人保护,申请返回年龄段标识。该标识用于区分成年与未成年用户,并实施相应的游戏服务限制。
强实名认证业务应用
适用场景
政务服务、交通出行、邮政寄递、金融服务、在线医疗、网吧上网、教育考试等。
返回条件与信息
依法确需获取、留存法定身份证件信息时,经用户授权或者单独同意,按最小必要性原则提供相关加密个人信息。
返相关属性标识业务应用
适用场景
网络游戏、婚恋交友、文化旅游等,用于未成年人保护、婚恋及适老化服务。
按需返回属性标识
按业务需要返回年龄段、性别、地区等属性标识,相关场景无需用户提交明文身份信息。
游戏应用:申请年龄段标识,用于判断用户是否成年。
Android 与 iOS 接入
服务申请
应用信息
* 应用名称
* 业务办理联系人
* 电话
* 应用涉及领域
应用类型
* 程序包名
* 预计上线时间
APK包签名V2
APK包签名V3
* 程序包名
* 预计上线时间
Universal Link 地址(推荐)
URL Scheme 地址
* 版权方
* 开发方
* 开发联系人
* 开发联系人电话
业务类型及认证模式
同一模式可同时选择两种返回信息,建议按需选择其中一项;不同模式分别填写服务量。
| 网证认证 | 网证(R01) | 网证+口令(R02) | 网证+人像(R03) | 网证+口令+人像(R04) |
|---|---|---|---|---|
| 返回网络身份认证凭据 | ||||
| 返回网络身份认证凭据+年龄段标识 |
服务量预估
| 业务类型 | 认证模式 | 预估服务并发量(TPS) | 预估日服务总量(次/日) |
|---|---|---|---|
| 网证认证 | 网证(R01) | 5 | 1000 |
| 网证认证 | 网证+口令(R02) | 5 | 1000 |
| 网证认证 | 网证+人像(R03) | 5 | 1000 |
| 网证认证 | 网证+口令+人像(R04) | 5 | 1000 |
| 请先选择认证模式 | |||
需求性材料
接入需求说明
1、应用基本情况(必填):如该App是本机构面向个人用户的主要移动客户端,提供**、**等服务,App中的**、**、**等场景需要对用户的身份进行认证。App用户数量为2亿,日活跃数为8000万,身份认证需求量为50万/天。
2、安全措施(必填):如该应用及后台系统按照网络安全等级保护定级要求进行安全防护,符合 GB/T22239 第二级安全保护能力的要求;个人信息授权使用符合 GB/T35273、GB/T42573、GB/T45574 中相关要求。
3、本次申请(必填):如App的注册、登录场景使用 网证 服务模式;身份认证并绑定网络身份场景使用网证+口令+返信息(部分姓名)服务模式;修改个人信息场景使用网证+人像服务模式等。
4、如有其他情况需要说明写在此处(可选,如:**小程序没有申请软著,特此说明)。
1、应用基本情况:“示例游戏 APP”由示例科技有限公司运营,面向个人用户提供账号注册、登录及在线游戏服务。在实名注册、账号身份绑定及异常登录核验时使用身份认证。现有用户[实际人数]人,日活跃用户[实际人数]人,预计每日认证[预计次数]次。
2、安全措施(方案一:已完成等保):本应用及后台系统已按第[实际等级]级完成定级、备案和测评,测评结论符合相应等级要求,备案编号[编号],测评报告日期[日期]。依据 GB/T 22239-2019 落实访问控制、网络隔离、入侵防护、安全审计、漏洞修复和备份恢复;按最小必要原则及用户授权处理个人信息,采用加密传输、敏感信息加密存储、密钥分离管理和分级授权,定期开展安全检查与应急演练。
安全措施(方案二:小微企业使用商业云、尚未完成等保):本公司为民营小微企业,本应用及后台部署于[阿里云/腾讯云,填写实际使用方及地域],业务系统尚未完成等保备案和测评。已通过私有网络及安全组限制访问,仅开放必要端口,数据库不对公网开放;管理员启用多因素认证并按最小权限授权;启用主机防护、漏洞扫描及异常登录告警,及时安装补丁;接口使用 HTTPS,敏感数据加密存储,密钥单独管理;保留访问与操作日志,定期备份并验证恢复,由专人处理安全告警。个人信息按必要范围及用户授权使用。云平台资质不等同于本系统通过等保,后续按定级及接入要求落实相关工作。
3、本次申请:拟在上述认证场景采用“网证+口令”模式(R02),申请返回年龄段标识(NL),用于区分成年与未成年用户、实施相应游戏服务限制。本例不申请姓名、身份证号、性别及人像信息,认证模式和返回字段以审批结果为准。
4、其他情况:本应用版权方与申请主体一致,软件著作权证明随申请材料提交;本次仅申请 APP 接入,不涉及小程序。
联调准备
联调接入方式差异
安全接入平台:无需自购专用设备
本单位后端 → 安全接入平台 → 国家公共服务平台
主要差异
由平台提供认证业务转发服务,机构无需自行部署安全接入设备。
优点
省去专用设备采购、上架和日常维护,前期准备较轻,适合并发需求在平台限额内的业务。
需要承担
依赖平台服务及网络连通性;仍需完成证书申请、密钥管理、接口对接和异常处理。
设备平台:采购并部署安全设备
本单位后端 → 安全设备 → 国家公共服务平台
主要差异
机构部署安全接入设备,由厂商配合设备适配、设备证书及机构证书申请。
优点
可按更高并发需求选择设备规格,自主安排设备部署与运维,适合超过平台并发限额的业务。
需要投入
需承担采购、部署、网络配置及维护工作;实际处理能力取决于设备规格和平台审批。
安全接入平台申请
账号、密钥与证书准备
01 领取账号
联系技术支持获取安全接入平台账号,首次登录后修改登录密码;核对机构信息及业务站点号。
02 生成密钥对
技术人员在受控环境运行 secure-access-tools 的密钥生成示例,生成一对新的 SM2 公钥和私钥;先完成配对验证,再保存生成结果。
03 配置公钥与证书
在“机构接入能力管理”上传机构鉴权公钥(ASN.1 结构、Base64 编码),并获取平台验签公钥与数字信封加密证书。机构鉴权私钥由本单位保管。
上传的是本单位公钥;从平台获取的是验签公钥和数字信封加密证书,注意区分
04 提交机构证书申请
安全接入平台方式需在两套系统分别发起机构证书申请;应用接入管理系统还需发起联调测试申请。提交后等待办理,查询各自状态。
05 核对状态后联调
应用接入管理系统:安全证书“正常”、系统联调测试“待联调”;安全接入平台:机构证书“已完成”。满足状态要求并核对密钥、证书配置后,再进入技术联调。
后端对接 · Java
从认证密文到可信业务结果
01 前端回传,后端接棒
用户在国家网络身份认证 APP 完成操作后,客户端将 getAuthResult 返回的认证密文交给 Java 后端。后端核对登录会话与本次业务流水,继续使用同一个 bizSeq,bizSeq可由前端使用UUID生成32位随机字符。
客户端回跳成功,只说明已取得后续请求材料;最终认证结论由后端核验。
02 组装业务包,用机构私钥签名
以游戏应用 R02+返年龄段为例。业务包填写应用名、站点号、时间戳、原 bizSeq、SDK 密文及返信息加密证书 cert;再封装转发地址,对 requestPackage 做 SM2 签名。
mode、站点号、证书与目标地址从后端配置读取;NL 按获批权限返回。
03 安全接入平台完成转发
Java 后端通过 HTTPS 调用安全接入平台。平台校验机构签名,并完成公共服务接口要求的签名与转发;国家网络身份认证公共服务平台处理业务认证。
安全接入平台负责安全转发,应用后端负责解释认证结果并执行自己的业务规则。
04 验签通过后,还要检查两层结果
工具先用平台验签公钥核验 responseSign。随后判断转发层 platformCode 为 200,再检查业务层 resultCode 为 C0000000,并核对响应 bizSeq 与原流水一致。
HTTP 200 或 platformCode = 200 均不能单独作为认证成功依据;失败时不进入解密与业务放行。
05 解密获批信息,再更新游戏业务
认证成功后,使用本次 cert 对应的返信息解密私钥打开 encryptedIdInfo。只读取获批的年龄段 NL,将核验结果关联当前账号,按业务规则更新年龄适配与功能权限。
返回客户端的是必要的业务结果;私钥、原始身份密文及完整解密内容不进入前端或普通日志。
测试联调 · 工具使用
注册测试账号
注册机构下的测试账号
测试数据录入.apk
安装并打开工具,输入机构 ID,按提示完成当前机构下的测试账号注册。
登录测试账号,进行测试线测试
国家网络身份认证测试App_Android_V1.2.39.5.apk或iOS包
安装并打开国家网络身份认证测试 App,登录刚注册的测试账号,再进行测试线的认证联调。
前端对接 · 跨平台流程
从业务 App 出发,带回认证材料
01 配置 SDK 与包可见性
引入 WClient.aar,在 Manifest 声明国家认证 APP 的查询包名;使用与接入申请一致的应用配置。调用时需要有效的 Activity。
02 同一业务流水贯穿前后端
准备 orgID、当前 Android 的 appID 与 32 位 bizSeq,并保留本次会话。以 R02 为例,type 使用整数 1,表示需要网证及口令材料。
03 SDK 通过 Intent 拉起认证 APP
调用 getAuthResult 并登记 OnCallBack。SDK 使用 Intent 打开国家认证 APP,用户在该 APP 内完成所需操作;业务 App 保持等待。
04 在 onResult 中读取认证材料
先检查 resultCode 是否为 C0000000,再从 getResultData() 读取 idCardAuthData;R02 还必须取得 certPwdData。材料不完整时停止提交。
05 材料交给后端,页面等待最终结论
将原 bizSeq、idCardAuthData 与 R02 所需 certPwdData 通过本单位业务接口提交后端。后端完成签名转发、验签、认证判断与按需解密,再返回业务结果。
01 先配置认证结束后的返回入口
集成 WClientSDK.framework 并设置 Embed & Sign。优先配置 Universal Links 返回地址;需要 URL Scheme 时,按手册配置 ncidas + orgID + appID。
02 业务参数中带上返回地址
orgID、iOS appID 和 bizSeq 与本次会话对应;R02 的 type 使用字符串 "1"。使用 Universal Links 回跳时,uLink 填本应用配置的返回链接。
03 同步返回仅反映调用阶段状态
调用 getAuthResult 通过 Universal Links 拉起国家认证 APP。方法立即返回同步状态字典;认证材料需要等待用户完成操作后的异步回跳。
04 在应用生命周期入口接收回跳
按宿主配置从 SceneDelegate 或 AppDelegate 接收 Universal Link/URL Scheme。核对回跳入口与来源字段,再解析 resultCode 和两项 R02 密文。
05 材料交给后端,页面等待最终结论
将原 bizSeq、idCardAuthData 与 R02 所需 certPwdData 通过本单位业务接口提交后端。后端完成签名转发、验签、认证判断与按需解密,再返回业务结果。
01 导入 HAR,确定结果接收方式
导入 w_auth.har,并在 module.json5 配置 querySchemes: ["https"]。提前选择直接回调,或使用 App Linking 返回本应用。
02 用 linking 参数选择返回路径
准备 orgID、鸿蒙 appID、bizSeq 与字符串 type。R02 使用 "1";填写 linking 时,需要完成本应用的 App Linking 配置。
03 openWHApp 拉起,回调路径提前准备
调用 openWHApp(context, json),SDK 通过 App Linking 打开国家认证 APP。直接回调方式应先注册监听;链接回跳方式则准备好 Ability 接收入口。
04 回调取出 resultData,再解析 JSON
App Linking 方式在 onCreate 和 onNewWant 中核对调用来源,再执行 setAuthCallBack(callBack, want)。OnCallBack 收到结果后先判成功,再解析 resultData。
05 材料交给后端,页面等待最终结论
将原 bizSeq、idCardAuthData 与 R02 所需 certPwdData 通过本单位业务接口提交后端。后端完成签名转发、验签、认证判断与按需解密,再返回业务结果。
01 统一调用入口,保留两端原生配置
w_client_flutter 将 Android 与 iOS 的拉起、回跳和结果封装为 Dart 接口。宿主仍需正确配置应用标识、Android 包可见性及 iOS 回跳。
02 用同一份 Dart 参数发起本次认证
按当前系统选择 appID,传入本次 bizSeq 与字符串 type。以 R02 为例使用 "1";iOS 返回地址依插件约定配置,不直接照搬原生 SDK 的默认 Scheme。
03 一次 Future 等待,插件适配原生调用
调用 getAuthResult 后,插件分别走 Android Intent 或 iOS Universal Link 拉起流程。业务页面显示等待状态,让原生回跳完成这一次 Future。
04 从 Map 读取材料,避免重复消费
先检查 resultCode,再读取 idCardAuthData 与 certPwdData。以 getAuthResult 的 Future 承接一次业务;如同时监听 authResultStream,需去重,避免重复提交。
05 材料交给后端,页面等待最终结论
将原 bizSeq、idCardAuthData 与 R02 所需 certPwdData 通过本单位业务接口提交后端。后端完成签名转发、验签、认证判断与按需解密,再返回业务结果。
后端对接 · 身份信息解密
解开数字信封,读懂身份字段
先完成认证校验,再取 encryptedIdInfo
在响应验签、转发状态、认证成功码与 bizSeq 均核对通过后,从业务响应 data 中取出 encryptedIdInfo。Base64 解码后得到数字信封字节,尚未得到明文身份信息。
String encrypted = auth.data().encryptedIdInfo();
requireNotBlank(encrypted);
byte[] envelope =
Base64.getDecoder().decode(encrypted);Base64 解码不是解密;缺少返信息时,不能推断年龄或身份字段。
先用 SM2 私钥解出 SM4 密钥
解析信封中的接收者信息与加密密钥。使用本次请求 cert 对应的返信息解密私钥,经 SM2 解密得到本封数据使用的 SM4 对称密钥;身份内容此时仍是密文。
// decodeEnvelop 内部完成:
// 1. 解析 ASN.1 数字信封
// 2. 读取接收者的 encryptedKey
// 3. 转换 SM2 密文结构并解密
// 4. 得到用于解密身份内容的 SM4 密钥不能使用机构鉴权签名私钥替代;私钥须与请求 cert 配对,编码也须符合工具要求。
再用 SM4 还原身份信息 JSON
使用解出的 SM4 密钥解密信封中的身份内容。配套 SM2Utils.decodeEnvelop 已封装前一步与本步;调用一次即可获得明文字节,再按 UTF-8 转为 JSON。
// 一次调用:SM2 解密钥 + SM4 解内容
byte[] plain = SM2Utils.decodeEnvelop(
returnInfoPrivateKey, envelope);
String json = new String(
plain, StandardCharsets.UTF_8);解密失败、证书私钥不匹配或 JSON 异常时停止处理,不记录完整明文。
按获批字段解释,再进入业务判断
解密后是 JSON 对象,只读取获批且实际返回的字段。以 {"NL":"09"} 为例,可判断年龄落在 22 至未满 45 周岁区间,无法得到准确年龄或生日。
JsonNode info = objectMapper.readTree(json);
JsonNode nl = info.get("NL");
if (nl == null || !nl.isTextual()) {
return handleMissingAgeBand();
}
return applyAgeBand(requireKnownAgeBand(nl.asText()));字段都是可选 String;缺失或未知编码按异常分支处理,不能默认判为成年人。
联调验收 · 正式上线
验收通过后,确认完成并切换正式线
提交报文,等待验收
联调完成后,将测试联调报文发送给平台工作人员,配合完成联调验收。
验收通过,网页确认
平台工作人员验收通过后,在接入管理网页上确认“联调完成”。
切换地址,进入正式线
安全接入平台:将 forwardUrl 切换为正式线转发目标地址。安全设备:按正式线配置切换设备地址。
后端留存 PID,供后续追溯与网安协调
PID 是认证服务凭据数据。后端可保存认证响应中的 data.PID,并关联本次业务流水与用户账号,作为后续网安协调时提供的认证凭据。
PID 与 encryptedIdInfo 同在认证响应的 data 中;按实际返回保存 PID 原始值。
"data": {
"PID": "认证服务凭据数据",
"encryptedIdInfo": "加密身份信息"
}交流与支持
感谢聆听,欢迎交流
如需商务合作或技术支持,欢迎扫码联系。

商务支持
叶凌志

技术支持