TouchID API

作者: iOS逆向 | 来源:发表于2017-04-21 16:54 被阅读235次

    TouchID 指纹识别是IPhone 5s设备新增的一项重大功能,用于数据加密和安全。而在IOS 8.0 以后也向第三方开放了相应功能API

    https://developer.apple.com/library/ios/documentation/LocalAuthentication/Reference/LAContext_Class/index.html

    https://developer.apple.com/reference/localauthentication/lacontext?language=objcobjc 语言示例

    添加Libraries:LocalAuthentication Framework

    Class

    LAContext

    -canEvaluatePolicy:error:

    Preflights an authentication policy to see if it is possible for authentication to succeed.监测设备是否支持TouchID,返回BOOL,并且若不支持,则在error里面返回相应状态

    -evaluatePolicy:localizedReason:reply:

    Evaluates the specified policy.TouchID验证状态,在block里面返回验证状态(BOOL)和error;

    reply:(void(^)(BOOLsuccess, NSError *__nullableerror))reply;

    evaluatedPolicyDomainState

    The current state of the evaluated policy domain.

    TouchID API 非常简单,仅仅对本设备的TouchID进行验证,但如果需要在app集成相应的 “设备登录/验证”功能或其他TouchID 的应用,则需自行设计关联和绑定流程(例如:设备Token、生成设备账号/密码、app包名/版本),绑定之后,才能使用TouchID 进行验证和应用。

    实现的关键点  :进行设备(用户)绑定

    由于API并不提供关于本设备或本app任何可关联的信息,所以集成TouchID还需自行设计关联流程,才能实现指纹登录功能,或者指纹支付功能。

    开启TouchID指纹密码:进行设备(用户)绑定

    关闭TouchID指纹密码: 在设备(用户)绑定之后,并且当前正处于登录状态,也可以将本设备取消绑定,流程基本与绑定流程

    设备(指纹)应用:

    例如登陆应用: 在设备(用户)绑定之后,并且用户账号退出后,可以使用指纹登录,若当前设备未绑定,则不会出现“指纹登录”按钮。

    例子:

    指纹登陆app (账号,设备账号/密码)

    账户绑定设备(生成设备账号/密码)

    开启:在app登录后,点击开启“指纹登录”;

    验证TouchID:检测当前设备是否支持TouchID,若支持则发起TouchID验证;

    生成设备账号/密码:TouchID验证通过后,根据当前已登录的账号和硬件设备Token,生成设备账号/密码(规则可自定,密码要长要复杂),并保存在keychain;

    绑定:生成设备账号/密码后,将原账号及设备账号/密码,加密后(例如RSA加密)发送到服务端进行绑定;

    成功:验证原账号及设备账号有效后,返回相应状态,绑定成功则完成整个TouchID(设备)绑定流程。(后台处理逻辑)

    设备(指纹)登陆

    TouchID登录:在用户登录界面,点击“指纹登录”;

    验证TouchID:检测当前设备是否支持TouchID,若支持则发起TouchID验证;

    登录:读取app在本机的设备账号/密码,调用设备登录接口,发起登录请求;

    成功:验证设备账号/密码后,返回相应状态,登录成功则完成整个TouchID登录流程。(后台处理逻辑)

    注意细节:

    生成账号/密码只是随机字符,以当前userID 为key,保存在keychain;登录时候根据keychain保存的最近一次登录的userID,获取账号/密码,进行登录

    检测系统录入了新指纹:evaluatedPolicyDomainState这个属性,每次指纹发生改变的时候,这个值就会变,可以通过这个值的变化来判断

    代码示例Expand source

    #import

    -(IBAction)touchIDClick{

    LAContext*context=[[LAContext alloc]init];

    NSError*error=nil;

    if([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error]){

    [contextevaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics

    localizedReason:@"验证touchID"

    reply:^(BOOL success,NSError*error){

    if(error){

    NSLog(@"操作失败");

    return;

    }

    if(success){

    NSLog(@"验证成功");

    }else{

    NSLog(@"验证失败");

    }

    }];

    }else{

    NSLog(@"设备不支持");

    }

    }

    相关文章

      网友评论

        本文标题:TouchID API

        本文链接:https://www.haomeiwen.com/subject/vsndzttx.html