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

yizhihongxing

微信小程序 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日

相关文章

  • scratch当前页面怎么插入文字?

    当你在使用 Scratch 编辑器的时候,如果需要在当前页面插入文字,可以通过以下步骤完成: 点击左侧的文字工具栏,选择需要插入的文字类型。 将光标放在编辑器画布上,按住鼠标左键,拖动鼠标创建一个文本区域。 将需要输入的文字输入到文本区域中,可以通过鼠标点击和拖动方式调整文本区域的大小和位置。 在创建的文本区域上单击右键,可以弹出更多的文字自定义选项,如字体…

    PHP 2023年5月30日
    00
  • PHP MPDF中文乱码的解决方式

    下面就为大家详细讲解PHP MPDF中文乱码的解决方式的完整攻略。 问题描述 在使用PHP的MPDF库进行文档生成时,如果文本中包含中文,可能会出现中文乱码的问题,需要解决。 解决方式 1. 设置字体文件 MPDF默认使用的字体文件并不包括中文字符,因此需要使用支持中文字符的字体文件。比如常用的思源宋体和思源黑体。 可以将字体文件放到MPDF的字体目录下,如…

    PHP 2023年5月23日
    00
  • PHP sprintf() 函数的应用(定义和用法)

    下面是关于 PHP sprintf() 函数的应用的完整攻略。 1. 定义 PHP sprintf() 函数是用于将格式化的字符串写入变量而不是直接输出的函数。常见用法是将变量插入到另一个字符串中,这样可以创建更具可读性的字符串。 2. 用法 2.1 基本用法 sprintf() 函数使用格式字符串和可选的参数列表来实现其功能。默认情况下,函数将返回格式化的…

    PHP 2023年5月25日
    00
  • 小编亲身实操,教你配置phpstorm与xdebug的调试配置,不成功你骂我

    开发php,还是找个专业的Ide较好,vscode毕竟在php上不专业,需要下载各种插件才行,还不支持多线程调试,因此小编下载了phpstorm,打算以后用phpstorm来开发php项目,断点调试代码是必不可少的,还是用xdebug吧,可小编在网上搜索了无数篇文章,照着做了一天,竟然没调试成功。最后功夫不负有心人,终于调试成功,想着成千上万的phper肯定…

    PHP 2023年4月17日
    00
  • php使用array_chunk函数将一个数组分割成多个数组

    关于如何使用array_chunk函数将一个数组分割成多个数组,可以按照以下几个步骤进行: 1. 了解array_chunk函数 首先,需要了解array_chunk函数的基本用法。array_chunk函数的作用是将一个数组按照一定的大小,分割成若干个小的数组。其基本语法为: array array_chunk(array $array, int $siz…

    PHP 2023年5月26日
    00
  • PHP方法的返回值示例详解

    那么我将为你讲解“PHP方法的返回值示例详解”的完整攻略。 什么是返回值? 在 PHP 中,我们可以通过函数或方法来执行特定的操作,执行完成后可以返回一个值。这个值就是所谓的“返回值”。返回值可以是任何类型的数据,比如数字、字符串、数组、对象等。 如何定义返回值? 在方法中定义返回值,可以使用 return 语句。例如,下面的 getSum 方法通过计算两个…

    PHP 2023年5月25日
    00
  • php正则判断是否为合法身份证号的方法

    要使用正则表达式判断一个字符串是否为合法身份证号,可以按照以下步骤进行操作。 1. 编写正则表达式 首先,我们需要编写一个正则表达式,用于匹配符合身份证号格式的字符串。根据国家标准GB 11643-1999的规定,身份证号的格式如下: 18位身份证号:由17位数字码和1位校验码组成。其中,前6位为地址码,接下来8位为出生日期码,最后3位为顺序码和校验码。 1…

    PHP 2023年5月23日
    00
  • 秒杀场景的缓存、队列、锁使用Redis优化设计方案

    以下是“秒杀场景的缓存、队列、锁使用Redis优化设计方案”的完整使用攻略,包括场景分析、方案设计和示例说明等内容。 场景分析 在秒杀场景中,由于大量用户同时访问,容易导致系统崩溃或响应缓慢。为了解决这个问题,我们可以使用Redis来优化设计方案,包括缓存、队列和锁等。 具体来说,我们可以使用Redis缓存商品信息和用户信息,使用Redis队列来处理用户请求…

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