2016-12-05 3 views
0

私のアプリの1つに、メールアドレス&のログイン機能があり、期待どおりに動作しています。TouchIDとメールの組み合わせでアプリを保護したい

ここに私のクライアントが欲しいものemail + TouchID(パスワードなし)は、アプリにログインする必要があります。

私の最初の質問は、両方の組み合わせで行うことができますTouchID & emailログイン?

私は単純なアプリケーションのロックを解除するためにタッチIDを使用していますが、touchidと電子メールを使用することはありませんどのように私はそれを行うことができますか?

私は検索していますが、多くのアプリは同じことをしていますが、どのようにしていますか?

MDM私はこれを設定することができますが、私はMDM(モバイルデバイス管理)を使用していないので、これについてはわかりません。

ありがとうございます。

+0

タッチID接続をメールにリンクしたいのですが(タッチIDがパスワードのように)、ログオンする必要はありません(メール+パスワード)+タッチIDですか? – Makaille

+0

yes touchIdが私のパスワードである – CodeChanger

+0

タッチIDが成功または失敗を返すことはできません。だからあなたは電子メールでそれを束縛することはできません。 @CodeChanger – KAR

答えて

1

あなたは、登録時にキーチェーンへの電子メールを保存するためにkSecAccessControlTouchIDCurrentSetを使用することができます。これにより、キーチェーンに保存するアイテムはCurrent TouchID + Email の組み合わせになります。ログイン時に、touchIdを使用してKeychainから電子メールを取得し、入力した電子メールと比較することができます。キーチェーンに電子メールを保存するために

、次のコードを使用:

:(iOS版9上で動作し、above--は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. 

キーチェーンデータをretriveするには、次のように使用することができます

-(void)retriveKeyChainData{ 

    NSDictionary *querryAttributes = @{ 
           (__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)querryAttributes, &dataTypeRef); 


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



} 

この関数は、登録時に保存したメールIDを取得します。入力した電子メールと比較して検証することができます。

この詳細は、tutorialをご覧ください。

+0

あなたの答えはありがたいですが、上記のことは登録がモバイルアプリを経由する場合には役に立ちますが、私のケースではモバイルアプリからの登録がないので、「touchId」でメールを保存する方法はありますか? – CodeChanger

+1

登録がモバイルからのものではない場合、次に電子メールで入力されたかどうかを確認するにはモバイルでタッチで認証されたユーザーとリンクしていますか? Webからの登録がパスワードでなければならないので、ユーザーがアプリに初めて来たときは、電子メールとパスワードを入力してサーバーで検証してください。 – Darshana

+0

Okいいアイデアを私のアプリで試してみましょう、あなたのコメントをありがとう、正しい道に私を導いた。 – CodeChanger

2

私がコメントで言ったように、私はこれが原因で考えられないタッチIDはいつもtrueまたはfalseに戻ると思います。

ただし、KeyChainTouchIDを使用すると、メールの価値を保存して保護することができます。そのため、ユーザーは自分のメールを置く必要があります。タッチIDを使用して、キーチェーンに格納されているメールが同じであることを確認します。

ドク:https://developer.apple.com/library/content/samplecode/KeychainTouchID/Introduction/Intro.html

0

複数の指紋サンプルを保存することができます。しかしOSから、あなたは指が大丈夫であるという返答を得られない。入力された指が大丈夫かどうか。

したがって、入力した指に基づいてユーザー(または電子メールアドレス)を識別することはできません。

TouchIDは識別メカニズムではなく、アクセス制御メカニズムです。

関連する問題