美文网首页
使用Touch ID(Local Authentication)

使用Touch ID(Local Authentication)

作者: 肉身佛陀 | 来源:发表于2017-01-22 09:32 被阅读265次

Local Authentication

原文地址

1. 概述

- Local Authentication 框架提供了按照指定的安全策略请求用户授权(本地授权)的工具。例如, 通过 Touch ID 请求用户授权。

2. LAContext

- LAContext 提供了用户授权的上下文。在该上下文中,你可以获取用户授权的相关信息。通常会基于用户的授权状态来进行相应的操作。

3. 授权策略

  • LAPolicyDeviceOwnerAuthenticationWithBiometrics

    • 可以简单的理解为,基于 TouchID 的授权;若 Touch ID 不可用,将会授权失败。在后面我们会详细阐述这种授权方式。
    • Touch ID,将在错误输入 5 次后被锁定。锁定后,需要输入密码来解锁
  • LAPolicyDeviceOwnerAuthentication

    • 支持两种授权方式,即:Touch ID 和 输入密码。
    • 优先以 Touch ID 方式进行授权,若 Touch ID 和 输入密码都不用,将授权失败。
    • 输入密码授权,将在错误输入 6 次后被锁定。

4. 请求用户授权

  • 逻辑
    • 逻辑图
  • 步骤
    • 创建授权上下文
    • 初始化授权相关信息
    • 判断是否支持指定的授权策略
   -(BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * _Nullable *)error
*`注意:若授权上下文为空(即:context = nil), 此时进行判断,会失败,且 error.code 为 0(初始值)`*
  • 若支持,则执行下一步;否则,授权失败,根据授权失败信息执行相关操作,错误类型如下

    • 该设备不支持 Touch ID
    • 未设置密码
    • 未注册 Touch ID
  • 按照指定的策略请求用户授权

    -(void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void (^)(BOOL success, NSError *error))reply

注意:请不要再 Block reply 中在此判断是否支持指定的策略,及调用 - canEvaluatePolicy:error:;否则会死循环。

  • 根据用户授权状态进行下一步操作
    • 用户取消了授权
    • 用户点击了“输入密码”按钮
    • 您已授权失败3次
    • 指纹被锁定
    • 应用程序进入后台

5. LAPolicy

  • LAPolicyDeviceOwnerAuthenticationWithBiometrics,Touch ID 验证
  • LAPolicyDeviceOwnerAuthentication,密码验证(iOS 9.0)

6. LAError(失败信息)

  • 授权策略是否可用
        LAErrorPasscodeNotSet,没有设置密码
        LAErrorTouchIDNotEnrolled,没有注册 Touch ID
        kLAErrorTouchIDNotAvailable,该设备不支持 Touch ID
  • 授权失败
        LAErrorUserCancel,用户取消授权
        LAErrorUserFallback,Touch ID 授权失败的情况下,用户点击“输入密码”按钮
        LAErrorAuthenticationFailed,授权失败三次
        LAErrorTouchIDLockout(iOS 9.0),Touch ID 被锁定(失败五次)
        LAErrorSystemCancel,应用进入后台时,授权失败
  • 其他
        LAErrorAppCancel(iOS 9.0)
        LAErrorInvalidContext(iOS 9.0)

6. Touch ID Authentication

代码:

    // 1.创建授权上下文
    LAContext *context = [[LAContext alloc] init];
    // 2.初始化授权相关的信息
    NSError *authError = nil;    
    NSString *localizedReasoningString = @"使用指纹解锁";
    bool isAvailable = false;
    isAvailable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError];
    // 3.判断是否支持指定的授权策略
    if (isAvailable) {
        // 5.按照指定策略请求用户授权
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:localizedReasoningString reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"success");
            } else {
                // 6.根据用户授权状态进行下一步操作
                switch (error.code) {
                    case LAErrorUserCancel:
                        NSLog(@"用户取消了授权 - %@", error.localizedDescription);
                        break;
                    case LAErrorUserFallback:
                        NSLog(@"用户点击了“输入密码”按钮 - %@", error.localizedDescription);
                        break;
                    case LAErrorAuthenticationFailed:
                        NSLog(@"您已授权失败3次 - %@", error.localizedDescription);
                        break;
                    case LAErrorTouchIDLockout:
                        NSLog(@"指纹被锁定 - %@", error.localizedDescription);
                        break;
                    case LAErrorSystemCancel:
                        NSLog(@"应用程序进入后台 - %@", error.localizedDescription);
                        break;
                    default:
                        NSLog(@"++%@--%zd", error.localizedDescription, error.code);
                        break;
                }
            }
        }];
    } else {
        // 4.根据授权失败信息执行相关操作
        switch (authError.code) {
            case LAErrorPasscodeNotSet:
                NSLog(@"未设置密码 - %@", authError.localizedDescription);
                break;
            case LAErrorTouchIDNotEnrolled:
                NSLog(@"未注册 Touch ID - %@", authError.localizedDescription);
                break;
            case kLAErrorTouchIDNotAvailable:
                NSLog(@"该设备不支持 Touch ID - %@", authError.localizedDescription);
                break;
            default:
                NSLog(@"--%@--%zd", authError.localizedDescription, authError.code);
                break;
        }
    }

原文地址

相关文章

  • 使用Touch ID(Local Authentication)

    Local Authentication 原文地址 1. 概述 2. LAContext 3. 授权策略 LAPo...

  • SecretDiary-RecordingEmotion

    ScretDiary a diary APP, using touch ID authentication * p...

  • Touch ID 使用

    简单记录一下如何在自己的 APP 中调用系统 Touch ID 注意: 代码:

  • Touch ID 使用

    介绍 Touch ID是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术。iOS8后苹果开放了T...

  • Touch ID使用

    前言:如果图片看不了请移步:简书 Touch ID简介 Touch ID指纹识别作为iPhone 5s上的“杀手级...

  • iOS 关于Touch-ID的验证

    我们在日常生活中经常会遇到使用软件弹出Touch-ID验证权限的问题。 例如: 其实很简单的只要我们引入Local...

  • 使用Touch Id验证

    在新版支付宝和新版QQ中都加入了指纹识别功能,这么高大上的功能自然要学学怎么使用了。 像这种调用系统功能的,自然要...

  • Touch ID 简单使用

    Touch ID 指纹识别首次应用是在2013年9月发布的iPhone 5s 上。在今天,指纹识别已经是所有智能手...

  • 2020-04-08 Kubernetes Dashboard

    Ref this doc: Bypassing authentication for the local Kube...

  • iOS 填坑之Touch ID与Face ID

    一、Touch ID 2013年随iPhone 5s面世,Apple开启了,Touch ID解锁在移动终端上的使用...

网友评论

      本文标题:使用Touch ID(Local Authentication)

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