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

相关文章

  • Mac系统替换软件应用内文件的详细教程

    以下是“Mac系统替换软件应用内文件的详细教程”的完整攻略。 1. 前言 在 Mac 系统中,有些软件为了防止破解,会对一些关键文件进行加密或者隐藏,这使得我们很难修改软件的一些配置项。但是,如果我们想要对软件进行个性化定制或者优化,就必须替换这些文件。 在本攻略中,我们将会介绍如何替换软件应用内的文件。请注意,在进行类似操作之前,请备份好相关文件,以免出现…

    PHP 2023年5月26日
    00
  • 学习php设计模式 php实现适配器模式

    学习PHP设计模式以及PHP实现适配器模式,包括以下三个部分: 什么是设计模式 设计模式是在软件开发中经验的总结,是一种解决特定问题的可复用的思想方法。设计模式提供了一种通用的解决方案,帮助开发者解决在软件开发中常见的问题,提高软件开发效率。 什么是适配器模式 适配器模式是一种结构型设计模式,它将不兼容的接口转换为可兼容的接口,以便不同的类之间能够相互通信。…

    PHP 2023年5月27日
    00
  • PHP实现动态web服务器方法

    PHP实现动态Web服务器方法可以使用如下步骤: 创建并配置Web服务器。 首先需要在本地搭建一个Web服务器,如Apache或Nginx,以供PHP代码的运行和服务。 在Web服务器配置文件中,需要启用PHP扩展模块,如mod_php或php-fpm,以便与PHP代码进行交互。 编写PHP代码。 PHP是一种脚本语言,需要编写PHP代码来实现Web应用程序…

    PHP 2023年5月27日
    00
  • PHP序列号生成函数和字符串替换函数代码

    PHP序列化函数serialize()和反序列化函数unserialize()是常用的用于存储和传输数据的方法。这两个函数能够把复杂的PHP数据结构序列化成字符串,然后再把这个字符串反序列化成原来的数据结构。在这个过程中,需要用到PHP函数str_replace()对生成的序列化字符串进行处理。 1. serialize()函数 PHP序列化函数serial…

    PHP 2023年5月26日
    00
  • 隐性调用php程序的方法

    “隐性调用php程序的方法”是指在HTTP请求中,通过一些特殊的方式调用PHP程序,以达到获取目标服务器上敏感信息、执行命令甚至控制服务器等攻击目的的一类攻击手法。 常见的隐性调用PHP程序的方法有以下几种: URL重写 URL重写比较常见的应用就是伪静态,将动态URL转化为易于理解和记忆的静态URL。攻击者可以模仿伪静态的URL重写技术,将动态请求伪装成静…

    PHP 2023年5月23日
    00
  • ThinkPHP 3.2.3实现加减乘除图片验证码

    ThinkPHP 3.2.3实现加减乘除图片验证码攻略 验证码是Web开发过程中不可避免的一部分,它的主要目的是防止恶意攻击、垃圾信息等不良行为。其中,图片验证码成为了市面上一种最为流行和有效的认证方式。在ThinkPHP 3.2.3中,使用其内置的验证码类可以轻松地实现基于加减乘除的验证码。下面详细介绍实现过程。 步骤1: 加载验证码类 在应用程序中加载验…

    PHP 2023年5月26日
    00
  • php数组中包含中文的排序方法

    对于包含中文的PHP数组排序,有两种不同的方法可以实现,分别是使用array_multisort()函数和usort()函数。 使用array_multisort()函数排序 array_multisort()函数是PHP的一个组合排序函数,可以对多组数据进行排序,本方法需要使用此函数实现。 步骤如下: 1.1 类型转换 由于中文排序和字符串排序不同,需要将…

    PHP 2023年5月26日
    00
  • 详解PHP数组赋值方法

    关于“详解PHP数组赋值方法”的完整攻略,我可以这样来讲解: 标题 (1)数组基础知识 在介绍PHP数组赋值方法之前,我们需要先了解一些数组的基础知识。数组是一种用来存储多个相同或不同类型的元素的数据结构。在PHP中,数组是一种容器,它能够容纳其他类型数据,包括标量、对象、数组等等。 PHP中的数组类型分为两种:索引数组和关联数组。索引数组使用数字下标来访问…

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