微信小程序 SOTER 生物认证DEMO 指纹识别功能

微信小程序 SOTER 生物认证DEMO 指纹识别功能攻略

简介

微信小程序SOTER(Secure Object Token Express Release)是一个基于微信安全架构的生物认证框架,提供了生物认证所需要的所有流程,并满足了不同场景的需求。其中,SOTER生物认证DEMO有很多的示例代码,本文主要讲述其中的指纹识别功能。

指纹识别功能开发流程

指纹识别功能的开发主要分为以下三个步骤:

1. 开通 SOTER 生物认证

在小程序后台开通SOTER生物认证,需要提供开发者认证信息和证明材料,证明材料需要额外上传。具体的开通流程可以参考微信小程序的官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/soter.html

2. 准备指纹识别所需的参数

指纹识别需要使用wx.checkIsSupportSoterAuthentication() API 判断设备是否支持SOTER生物认证,并获取设备支持的生物认证方式;同时需要创建生物认证的挑战因子,用于发起生物认证请求。

示例代码如下:

wx.checkIsSupportSoterAuthentication({
   success(res) {
      console.log(res);
      const supportMode = res.supportMode;
      if (supportMode.length > 0) {
         wx.startSoterAuthentication({
            challenge: '123456',
            authModes: [supportMode[0]],
            success(res) {
               console.log(res);
            },
            fail(res) {
               console.log(res);
            }
         });
      }
   },
   fail(res) {
      console.log(res);
   }
});

3. 处理指纹识别的结果

当指纹识别请求成功时,会返回一个包含resultJSONresultJSONSignature的对象,其中resultJSON是经过AES-256-CBC算法加密的生物认证信息,需要后端解密;resultJSONSignature是RSA算法生成的数字签名信息,用于校验生物认证信息是否被篡改。

示例代码如下:

wx.startSoterAuthentication({
   challenge: '123456',
   authModes: [supportMode[0]],
   success(res) {
      console.log(res);
      wx.checkIsSoterEnrolledInDevice({
         checkAuthMode: supportMode[0],
         success(res) {
            console.log(res);
            if (res.isEnrolled) {
               wx.request({
                  // 解密 resultJSON,校验 resultJSONSignature
                  success(res) {
                     console.log(res);
                  },
                  fail(res) {
                     console.log(res);
                  }
               });
            }
            else {
               console.log('用户未录入相关生物认证');
            }
         },
         fail(res) {
            console.log(res);
         }
      });
   },
   fail(res) {
      console.log(res);
   }
});

示例说明

示例一:获取设备支持的生物认证方式

假设设备支持指纹和人脸两种生物识别方式,程序选择使用指纹识别。

wx.checkIsSupportSoterAuthentication({
   success(res) {
      console.log(res);
      // 获取支持模式的数组
      const supportMode = res.supportMode;
      // 判断是否支持指纹识别
      if (supportMode.indexOf('fingerPrint') >= 0) {
         wx.startSoterAuthentication({
            challenge: '123456',
            // 只使用指纹识别
            authModes: ["fingerPrint"],
            success(res) {
               console.log(res);
            },
            fail(res) {
               console.log(res);
            }
         });
      }
   },
   fail(res) {
      console.log(res);
   }
});

示例二:校验生物认证信息是否被篡改

示例代码中通过调用后端接口获取解密后的生物认证信息,并使用公钥校验RSA算法生成的数字签名信息,确保生物认证信息未被篡改。

wx.startSoterAuthentication({
   challenge: '123456',
   authModes: [supportMode[0]],
   success(res) {
      console.log(res);
      wx.checkIsSoterEnrolledInDevice({
         checkAuthMode: supportMode[0],
         success(res) {
            console.log(res);
            // 校验是否录入了相关生物认证方式
            if (res.isEnrolled) {
               wx.request({
                  // 解密 resultJSON,校验 resultJSONSignature
                  success(res) {
                     console.log(res);
                     // 解密 resultJSON
                     const plainText = wx.arrayBufferToBase64(wx.soterDecryption({
                        mode: 'AES-CBC',
                        padding: 'PKCS7',
                        data: res.data.resultJSON,
                        key: '1234567890abcdef1234567890abcdef'
                     }));
                     console.log(plainText);
                     // 校验 resultJSONSignature
                     const rsa = new JSEncrypt();
                     rsa.setPrivateKey('私钥');
                     if (rsa.verify(plainText, res.data.resultJSONSignature, CryptoJS.SHA256)) {
                        console.log('验证签名成功');
                     }
                     else {
                        console.log('验证签名失败');
                     }
                  },
                  fail(res) {
                     console.log(res);
                  }
               });
            }
            else {
               console.log('用户未录入相关生物认证');
            }
         },
         fail(res) {
            console.log(res);
         }
      });
   },
   fail(res) {
      console.log(res);
   }
});

以上就是指纹识别功能的完整攻略,希望可以对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序 SOTER 生物认证DEMO 指纹识别功能 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php 中的closure用法详解

    PHP 中的 Closure 用法详解 什么是闭包(Closure)? 闭包是一种能够存储变量状态的匿名函数,可以在定义它的所在函数已经退出后执行,保留着所在函数的变量值,因此也称为 匿名函数的 引用封装那些变量。 闭包的基本语法 $func = function(parameters) use ($variable) { // function body …

    PHP 2023年5月26日
    00
  • php自动提交表单的方法(基于fsockopen与curl)

    要实现php自动提交表单,可以使用fsockopen或curl两种方式,本文将分别介绍这两种方法的使用。 1.使用fsockopen进行自动表单提交 1.1 准备参数 使用fsockopen进行自动表单提交,需要准备以下参数: URL:表单提交的地址 Method:表单提交的方法(一般为post) 表单内容:表单中的各个字段及其值 1.2 发送表单数据 将准…

    PHP 2023年5月26日
    00
  • php中的buffer缓冲区用法分析

    PHP中的Buffer缓冲区用法分析 Buffer缓冲区是指在服务器端处理脚本时,不直接把内容输出到浏览器,而是先缓存到某个区域,直到脚本运行或缓冲区大小超过限制后再输出。 在PHP中,可以使用三种方式开启缓冲区:使用 ob_start() 函数手动开启缓冲区;在php.ini配置文件中设置output_buffering=On 隐式开启缓冲区;使用 ini…

    PHP 2023年5月26日
    00
  • 抓取整个网页保存为图片的实用工具 Web2Pic Pro

    抓取整个网页保存为图片的实用工具 Web2Pic Pro Web2Pic Pro是一款可以将整个网页抓取保存为图片的实用工具,它可以方便我们将想要的网页内容保存为图片,便于离线查看和分享。以下是Web2Pic Pro的完整攻略。 步骤1:安装Web2Pic Pro Web2Pic Pro是一款付费软件,需要购买后才能使用,我们可以到官方网站进行购买和下载安装…

    PHP 2023年5月27日
    00
  • 批量下载对路网图片并生成html的实现方法

    我来为你详细讲解“批量下载对路网图片并生成html的实现方法”的完整攻略。 实现方法 确定目标图片网站 首先需要确定目标图片网站,找到需要下载的图片所在的页面 找到图片标签 在目标网站页面中,需要找到所有图片元素所对应的标签,通常是<img>标签 提取图片链接 提取每个图片标签中的src属性即可得到图片下载链接 下载图片 用python程序对获取…

    PHP 2023年5月27日
    00
  • PHP合并两个或多个数组的方法

    PHP合并两个或多个数组的方法有多种方法,本文将介绍三种常用的方法,分别是array_merge()函数、array_replace()函数和“+”运算符。 方法一:array_merge()函数 array_merge()函数可以将两个或多个数组合并成一个新的数组,并返回结果数组。这个函数合并数组时会保留每个数组元素的键名,如果遇到键名冲突,则后面的数组的…

    PHP 2023年5月26日
    00
  • PHP判断是否微信访问的方法示例

    下面就为您讲解如何使用PHP判断是否为微信访问,完整攻略如下: 1. 通过用户代理字符串判断 首先,在PHP中可以通过$_SERVER变量获取当前访问请求的一些信息,其中就包含了用户代理字符串(User-Agent)信息。微信客户端的User-Agent字符串中会包含“WeChat”关键字,因此可以通过判断User-Agent中是否包含“WeChat”来判断…

    PHP 2023年5月23日
    00
  • PHP获取时间戳、获取天周月的起始时间、指定时间所在周、指定时间的各个周等相关函数

    一、时间戳和日期互相转换 // 获取时间戳 $date = time(); // 获取当前时间戳 $date = mktime(0, 0, 0, 10, 10, 2020); // 获取指定时间的时间戳 2020年10月10日0时0分0秒 // 日期转换为时间戳 $date = “2019-08-08 08:08:08”; $timestamp = strt…

    PHP 2023年5月4日
    00
合作推广
合作推广
分享本页
返回顶部