标签: touch-id

只能在Swift 3中使用Touch ID访问Keychain中的数据

我正在努力实现以下代码:

  • 将一些数据存储在Keychain中.
  • 仅当用户使用Touch ID或Pass Code进行身份验证时才获取数据.

我看了钥匙扣和身份验证与Touch ID演示,并了解以下内容:

如果在向Keychain中添加新值时设置了正确的参数,则下次尝试将其取出时,系统将自动显示Touch ID弹出窗口.

我写了一些代码,但我的假设不起作用.这就是我写的:

    //
    //  Secret value to store
    //
    let valueData = "The Top Secret Message V1".data(using: .utf8)!;

    //
    //  Create the Access Controll object telling how the new value
    //  should be stored. Force Touch ID by the system on Read.
    //
    let sacObject =
        SecAccessControlCreateWithFlags(kCFAllocatorDefault,
                            kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
                            .userPresence,
                            nil);

    //
    //  Create the Key Value array, that holds the query to store 
    //  our data
    //
    let insert_query: NSDictionary …
Run Code Online (Sandbox Code Playgroud)

keychain ios touch-id swift

29
推荐指数
1
解决办法
6639
查看次数

TouchID调用applicationWillResignActive和applicationDidBecomeActive

我想知道Apple是否打算使用TouchID功能调用这些生命周期方法.

是否有可能检查touchID进程是否正在调用这些方法(我想避免在app delegate中设置BOOL,如果当前显示的是touchID输入,则设置该BOOL ...)

BR

ios touch-id ios8

24
推荐指数
1
解决办法
4254
查看次数

如何以编程方式检查"Face Id"和"Touch Id"的支持

我已经为我的应用程序安全目的集成了LocalAuthentication,它一直支持基于"Touch Id"的支持.但是现在,苹果最近还增加了"基于身份识别"的身份验证.

如何检查设备支持哪种类型的身份验证.触摸ID或面部ID?

ios touch-id ios11 localauthentication face-id

24
推荐指数
8
解决办法
2万
查看次数

确定iOS设备是否支持TouchID而不设置密码

我目前正在开发一个iOS应用程序,使用户可以使用TouchID登录应用程序,但首先他们必须首先在应用程序内设置密码.问题是,要显示设置密码选项以启用TouchID登录,我需要检测iOS设备是否支持TouchID.

使用LAContext和canEvaluatePolicy(如此处的答案如果设备支持Touch ID),如果用户在其iOS设备上设置了密码,我可以确定当前设备是否支持TouchID .这是我的代码片段(我使用的是Xamarin,所以它在C#中):

static bool DeviceSupportsTouchID () 
{
    if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
    {
        var context = new LAContext();
        NSError authError;
        bool touchIDSetOnDevice = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out authError);

        return (touchIDSetOnDevice || (LAStatus) Convert.ToInt16(authError.Code) != LAStatus.TouchIDNotAvailable);
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

如果用户尚未设置设备密码,则无论设备是否实际支持TouchID ,authError都将返回" PasscodeNotSet "错误.

如果用户的设备支持TouchID,我想在我的应用程序中始终显示TouchID选项,无论用户是否在其设备上设置了密码(我只是警告用户首先在他们的设备上设置密码).反之亦然,如果用户的设备不支持TouchID,我显然不想在我的应用程序中显示TouchID选项.

所以我的问题是,无论用户是否在其设备上设置了密码,是否有一种很好的方法可以始终如一地确定iOS设备是否支持TouchID?

我能想到的唯一解决方法是确定设备的体系结构(在确定iOS设备是32位还是64位时可以回答),因为只有具有64位体系结构的设备才支持TouchID.但是,我正在寻找是否有更好的方法来做到这一点.

先谢谢!:)

iphone ipad ios xamarin touch-id

21
推荐指数
3
解决办法
2万
查看次数

有没有办法在iOS模拟器上使用苹果的Touch ID(指纹扫描仪)?

我正在开发一个需要Touch ID身份验证的应用程序,所以有什么方法可以在模拟器中使用Touch ID(指纹扫描仪)吗?

另外,请分享使用LocalAuthentication框架的某种示例代码.

iphone ios ios-simulator touch-id ios8

19
推荐指数
2
解决办法
3万
查看次数

touchIDLockout在iOS 11.0中已弃用

使用Xcode 9为IOS11编译我的应用程序时,我收到以下警告:

warning: 'touchIDLockout' was deprecated in iOS 11.0: use LAErrorBiometryLockout

warning: 'touchIDNotEnrolled' was deprecated in iOS 11.0: use LAErrorBiometryNotEnrolled

warning: 'touchIDNotAvailable' was deprecated in iOS 11.0: use LAErrorBiometryNotAvailable
Run Code Online (Sandbox Code Playgroud)

我正在使用touchID,但我没有使用touchIdLockout ... cste,touchID工作正常.

我该如何删除这些警告?


编辑(不是原作者):

我将此追踪到一个原因.LAError从我的代码中的LocalAuthentication框架引用就足以显示这些警告.

重现的步骤(在Xcode 9.2中尝试过):

  1. 创建一个新的iOS应用程序(单一视图模板).请注意,iOS部署目标设置为iOS 11.2.
  2. 将这些行添加到AppDelegate.swift:

    import LocalAuthentication
    
    Run Code Online (Sandbox Code Playgroud)

    还有一行appDidFinishLaunching:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let _: LAError? = nil
        return true
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 构建应用程序.

let _: LAError? = nil行足以显示三个警告.但是,警告与任何特定代码行都没有关联.它们出现在构建日志中,没有任何文件/行引用:

<unknown>:0: warning: 'touchIDLockout' was …
Run Code Online (Sandbox Code Playgroud)

xcode compilation ios touch-id swift

19
推荐指数
3
解决办法
3971
查看次数

有没有办法在网络浏览器中使用Android指纹API或iOS Touch ID?

例如,我有一个带身份验证的网站.是否有可以从JavaScript使用的指纹API登录用户?Android和iOS等移动操作系统都有这样的API.因此,理论上至少移动版浏览器可以提供这样的功能.但我无法在网上找到任何关于它的信息.

javascript fingerprint asp.net-web-api touch-id android-fingerprint-api

17
推荐指数
2
解决办法
7380
查看次数

iOS8检查设备是否具有Touch ID

LAContext具有检查设备是否可以评估触摸ID并提供错误消息的方法.问题是系统在两种情况下给出了相同的错误消息"LAErrorPasscodeNotSet":

1)如果用户具有Touch ID,但在设置中将其关闭(带iOS8的iPhone 5s)

2)如果设备没有Touch ID(带iOS8的iPad)

问:如何检查设备是否支持Touch ID,但未在设置中打开?

更新:

已经创建了关于这个bug(ID#18364575)的Apple门票,并收到了回答:

" Engineering已根据以下信息确定此问题的行为符合预期:

如果未设置密码,您将无法检测Touch ID的存在.一旦设置了密码,canEvaluatePolicy将最终返回LAErrorTouchIDNotAvailable或LAErrorTouchIdNotEnrolled,您将能够检测Touch ID存在/状态.

如果用户在具有Touch ID的手机上禁用了密码,则他们知道他们将无法使用Touch ID,因此这些应用无需检测Touch ID状态或推广基于Touch ID的功能."

iphone ios touch-id ios8 face-id

16
推荐指数
1
解决办法
6634
查看次数

是否可以在iOS应用中使用Touch-ID身份验证和钥匙串共享?

我已经成功地分别使用钥匙串和钥匙串共享(在多个设备之间同步钥匙串项)来实现TouchID.当我尝试同时执行它们时,我收到错误"-50",这是无效参数.从下面的代码中,删除kSecAttrAccessControlkSecAttrSynchronizable按预期工作.

根据我的经验(阅读 - 几天的挫折)到目前为止,并基于一些钥匙串API简化工具(UICKeychainStore)的功能,似乎如果我使用Touch ID身份验证,钥匙串共享将无法工作,反之亦然.我正在寻找可以说明但无法找到它的Apple文档.

我已经浏览了Apple的SecItem.h页面,我找到了一个有用的信息,其中包含有关kSecAttrAccessiblekSecAttrSynchronizable的信息:"如果在OS X或iOS上都指定了这两个属性,则kSecAttrAccessible密钥的值可能只是其名称之一不会以"ThisDeviceOnly"结尾,因为那些不能同步到另一台设备."但是,我没有使用"ThisDeviceOnly"(我目前正在使用kSecAttrAccessibleAlways进行测试)

您能否指出Apple是否以及在何处记录此限制?这将有助于我记录它的记录,并继续前进.谢谢.

- (void)addKeychainItemWithIdentifier:(NSString *)identifier andData:(NSData *)data {

    CFErrorRef error = NULL;
    SecAccessControlRef sacObject;
    sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
                                            kSecAttrAccessibleAlways,
                                            kSecAccessControlUserPresence, &error);
    if(sacObject == NULL || error != NULL)
    {
    NSString *msg0 = [NSString stringWithFormat:NSLocalizedString(@"SEC_ITEM_ADD_CAN_CREATE_OBJECT", nil), error];
    [self printResultWithMessage:msg0];
    return;
    }

    NSDictionary *attributes = @{
                             (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
                             (__bridge id)kSecValueData: data,
                             (__bridge id)kSecAttrAccessible:(__bridge id)kSecAttrAccessibleAlways,
                             (__bridge id)kSecAttrService: identifier,
                             (__bridge id)kSecAttrSynchronizable:(__bridge …
Run Code Online (Sandbox Code Playgroud)

objective-c keychain ios touch-id ios8

16
推荐指数
1
解决办法
2438
查看次数

确定Touch ID保护的钥匙串项是否存在?

有没有办法确定是否已使用Touch ID访问控制在iOS钥匙串中设置了项目(密码,令牌等)而没有提示用户输入Touch ID?在执行操作之前,我们需要确定凭证是否已保存到钥匙串(带有Touch ID保护),但我们不希望使用Touch ID提示中断用户.

我试过以下......

NSMutableDictionary *query = ...
query[(__bridge id)kSecUseNoAuthenticationUI] = (__bridge id)kCFBooleanTrue;

OSStatus opStatus = SecItemCopyMatching((__bridge CFDictionaryRef)query, NULL);

...
Run Code Online (Sandbox Code Playgroud)

但是,当调用此代码时,用户仍会看到Touch ID提示.我们不希望任何东西在UI上进行显示,而只是想在返回一个错误OSStatus,如果触摸ID 会被需要.

有什么想法吗?

security keychain ios touch-id

16
推荐指数
2
解决办法
1887
查看次数