微信小程序 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. 处理指纹识别的结果
当指纹识别请求成功时,会返回一个包含resultJSON
和resultJSONSignature
的对象,其中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技术站