想结合使用 TouchID 和电子邮件来保护我的应用程序

Want to secure my app with combination of TouchID & email

我的一个应用程序具有使用电子邮件和密码登录的功能,并且按预期工作正常。

现在,我的客户想要什么 email + TouchID (无密码) 需要登录应用程序。

所以我的第一个问题是我可以同时使用 TouchIDemail 登录的组合来做到这一点吗?

我已经使用 Touch id 来简单解锁我的应用程序,但从来没有使用电子邮件 touchid 知道我该怎么做吗?

我有搜索功能,很多应用程序都在做同样的事情,但是怎么做的呢?

我从一个博客中发现,在 MDM 的帮助下,我可以配置它,但我没有使用 MDM(移动设备管理),所以对此不确定。

提前致谢。

正如我在评论中所说,我认为这不可能,因为 Touch ID 将始终 return 给你 truefalse

但您可以使用 KeyChainTouchID 来存储和保护您的邮件价值。所以,你的用户必须把他的邮件,使用touch id 来验证keychain 中存储的邮件是否相同。

文档:https://developer.apple.com/library/content/samplecode/KeychainTouchID/Introduction/Intro.html

您可以在注册时使用kSecAccessControlTouchIDCurrentSet将电子邮件存储到钥匙串中。这样,您将存储到钥匙串中的项目将是 Current TouchID + Email.

的组合

登录时,您可以使用touchId从钥匙串中检索电子邮件,并将其与输入的电子邮件进行比较。

要将电子邮件存储到钥匙串中,请使用以下代码:(适用于 iOS 9 及更高版本--不适用于 iOS 8)

-(void)saveToKeyChain:(NSString*)email{
    CFErrorRef error = NULL;

    SecAccessControlRef scaObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, kSecAccessControlTouchIDCurrentSet,         &error);

    NSDictionary *attributes = @{
                                 (__bridge id)kSecClass:(__bridge id)kSecClassGenericPassword,
                                 (__bridge id)kSecAttrService  :@"ToucIdWithEmailExample",
                                  (__bridge id)kSecValueData    :[email dataUsingEncoding:NSUTF8StringEncoding],
                                  (__bridge id)kSecUseNoAuthenticationUI  :@YES,

                                  (__bridge id)kSecAttrAccessControl  : (__bridge_transfer  id)scaObject
                                 };

    OSStatus initialWriteStatus =  SecItemAdd((__bridge CFDictionaryRef)attributes, nil);

}

kSecAccessControlTouchIDCurrentSet in above will take store Email with current authenticated touch.

要检索钥匙串数据,您可以使用以下方法:

-(void)retriveKeyChainData{

    NSDictionary *queryAttributes = @{
                                 (__bridge id)kSecClass:(__bridge id)kSecClassGenericPassword,
                                 (__bridge id)kSecAttrService  :@"ToucIdWithEmailExample",
                                 (__bridge id)kSecReturnData    : @YES,

                                 (__bridge id)kSecUseOperationPrompt  : @"Authenticate"
                                 }.mutableCopy;

    CFTypeRef dataTypeRef = NULL;
    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)queryAttributes, &dataTypeRef);

    if(status == errSecSuccess)
    {
        NSData *data = (__bridge NSData*)(dataTypeRef);
    }



}

此功能将检索您在注册时存储的电子邮件 ID。您可以将其与输入的电子邮件进行比较并验证。

你可以通过这个tutorial - 如果你想详细了解它。

在您的设备上,您可以存储多个指纹样本。但是,从 OS 中您没有得到哪个手指没问题的答复。只是输入的手指是否可以。

因此无法根据输入的手指识别用户(或电子邮件地址)。

TouchID 是一种访问控制机制,而不是一种识别机制。