Bootstrap

小程序 生物认证(指纹、面部识别、声纹识别)

只是自己手机的验证,比如手机有指纹就可以调指纹的,有人脸识别就掉人脸识别的,就类似支付方式验证,仅本地验证(根据微信官网评论得出此消息)

(1)验证设备支持认证方式
	wx.checkIsSupportSoterAuthentication({
	  success(res) {
	    res.supportMode = [] 不具备任何被SOTER支持的生物识别方式
	    res.supportMode = ['fingerPrint'] 只支持指纹识别
	    res.supportMode = ['fingerPrint', 'facial','speech'] 支持指纹识别、人脸识别和声纹
	  }
	})
	
(2)进行生物认证
	wx.startSoterAuthentication({
		requestAuthModes:['...']	请求使用的可接受的生物认证方式
		challenge				挑战因子。挑战因子为调用者为此次生物鉴权准备的用于签名的字符串关键识别信息,将作为 resultJSON 的一部分,供调用者识别本次请求。例如:如果场景为请求用户对某订单进行授权确认,则可以将订单号填入此参数。
		authContent:"验证描述,即识别过程中显示在界面上的对话框提示内容"
		success,
			authMode		生物认证方式
			resultJSON		在设备安全区域(TEE)内获得的本机安全信息(如TEE名称版本号等以及防重放参数)以及本次认证信息(仅Android支持,本次认证的指纹ID)
				raw		调用者传入的challenge
				fid		(仅Android支持)本次生物识别认证的生物信息编号(如指纹识别则是指纹信息在本设备内部编号)
				counter	防重放特征参数
				tee_n	TEE名称(如高通或者trustonic等)
				tee_v	TEE版本号
				fp_n	指纹以及相关逻辑模块提供商(如FPC等)
				fp_v	指纹以及相关模块版本号
				cpu_id	机器唯一识别ID
				uid		概念同Android系统定义uid,即应用程序编号
			resultJSONSignature	用SOTER安全密钥对 resultJSON 的签名(SHA256 with RSA/PSS, saltlen=20)
			errCode			错误码
			errMsg			错误信息
		fail,
		complete
	})
	
	(1)若要进行本次生物认证的鉴权
		bool 验签结果=verify(用于签名的原串,签名串,验证签名的公钥)
			验证成功返回
				{"is_ok":true}
			验证失败返回
				{"is_ok":false}
			接口调用失败
				{"errcode":"xxx,"errmsg":"xxxxx"}
		POST http://api.weixin.qq.com/cgi-bin/soter/verify_signature?access_token=%access_token
		post 数据内容:
			{"openid":"$openid", "json_string" : "$resultJSON", "json_signature" : "$resultJSONSignature" }

代码示例:

 wx.checkIsSupportSoterAuthentication({
   success(res) {
     // res.supportMode = [] 不具备任何被SOTER支持的生物识别方式
     // res.supportMode = ['fingerPrint'] 只支持指纹识别
     // res.supportMode = ['fingerPrint', 'facial'] 支持指纹识别和人脸识别
     console.log(res);
     wx.startSoterAuthentication({
       requestAuthModes: ['facial'],
       challenge: '123456',
       authContent: '请用面部识别解锁',
       success(res) {
         console.log(res)
       },
       fail(res){
         console.log(res);
         console.log('解锁失败')
       }
    })
   },
   fail(res){
     console.log(res)
   }
 })
;