ios8 TouchID检测是否添加了指纹

Sta*_*lle 11 fingerprint ios touch-id ios8

我正在深入研究Apple的Touch ID,更准确地说是Local Authenticator.截至目前的文档非常稀少.它主要是这个:

LAContext *myContext = [[LAContext alloc] init];
NSError *authError = nil;
NSString *myLocalizedReasonString = <#String explaining why app needs authentication#>;

if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics    error:&authError]) {
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
              localizedReason:myLocalizedReasonString
                        reply:^(BOOL success, NSError *error) {
        if (success) {
            // User authenticated successfully, take appropriate action
        } else {
            // User did not authenticate successfully, look at error and take appropriate action
        }
    }];
} else {
// Could not evaluate policy; look at authError and present an appropriate message to user
}
Run Code Online (Sandbox Code Playgroud)

取自https://developer.apple.com/documentation/localauthentication

使用指纹进行身份验证的想法很不错.但如果我知道密码,我可以在设备中添加指纹.它很容易得到密码,就像你坐在受害者旁边的火车上,看着他/她输入密码.

我想使用指纹作为安全认证的一种方式,但希望能够检测自我上次请求指纹以来是否添加了新指纹.

Apple正在为AppStore做这件事.如果您想在AppStore中验证事务并且自上次事务以来添加了新的指纹,则AppStore会请求您的AppleId-Password.这是理智的行为,因为手机可能是由知道密码并添加了自己的指纹以购买昂贵物品的其他人带走的.

我的问题:我可以检测自上次使用Local Authenticator以来是否添加了新指纹?

Kei*_*rey 19

现在可以在iOS9中使用.属性evaluatePolicyDomainState已添加到LAContext.

如果修改了指纹数据库(添加或删除了手指),则evaluatePolicyDomainState返回的数据将更改.无法确定更改的性质,但通过在不同的evaluatePolicy调用之后比较evaluatePolicyDomainState的数据,您可以检测到指纹集已被修改.

请注意,仅当调用evaluatePolicy并执行成功的Touch ID身份验证或canEvaluatePolicy成功执行生物识别策略时,才会设置此属性.


Cri*_*ena 10

正如Keith所说,在iOS 9中它是可能的.你应该这样做.

    let context = LAContext()
    context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil)

    if let domainState = context.evaluatedPolicyDomainState
        where domainState == oldDomainState  {
        // Enrollment state the same

    } else {
        // Enrollment state changed

    }
Run Code Online (Sandbox Code Playgroud)

每次添加或删除指纹时,域状态都会更改.你需要调用canEvaluatePolicyevaluatedPolicyDomainState更新.


Joe*_*yer 5

简而言之; 没有.

更详细一点; 该LocalAuthentication框架是一个紧密把守的黑盒子.您从中获得的信息非常有限.你与它的互动是这样的:

  • 询问它是否能够对某种类型的政策进行身份验证(在撰写本文时只有1个可用 - 生物识别(Touch ID))
  • 如果可以,请它实际执行
  • 系统接管实际身份验证
  • 它可以让您知道身份验证是否成功(如果没有,它会告诉您原因)

您没有实际身份验证过程的概念(例如,使用了哪个手指).当然,这是设计上的.Apple不希望也不需要让您访问此类信息.