11

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
}

https://developer.apple.com/documentation/localauthenticationから取得

認証に指紋を使用するというアイデアは素晴らしいです。しかし、パスコードを知っていれば、デバイスに指紋を追加できます。そして、パスコードを取得するのは非常に簡単です。たとえば、電車の中で被害者の隣に座って、被害者がパスコードを入力するのを見るようにします。

安全な認証方法として指紋を使用したいのですが、前回指紋を要求してから新しい指紋が追加されたかどうかを検出できるようにしたいと考えています。

Apple は AppStore のためにこれを行っています。AppStore でトランザクションを認証する必要があり、最後のトランザクション以降に新しい指紋を追加した場合、AppStore は AppleId-Password を要求します。パスコードを知っていて、高価なものを購入するために自分の指紋を追加した誰かが電話を盗んだ可能性があるため、これは正常な動作です。

私の質問: 前回 Local Authenticator を使用してから新しい指紋が追加されたかどうかを検出できますか?

4

6 に答える 6

20

これは iOS9 で可能になりました。プロパティ evaluatePolicyDomainState が LAContext に追加されました。

指紋データベースが変更された場合 (指が追加または削除された場合)、evaluatedPolicyDomainState によって返されるデータが変更されます。変更の性質を判断することはできませんが、異なる evaluatePolicy 呼び出しの後で evaluatePolicyDomainState のデータを比較することにより、フィンガープリントのセットが変更されたことを検出できます。

このプロパティが設定されるのは、evaluatePolicy が呼び出され、Touch ID 認証が正常に実行された場合、または生体認証ポリシーに対して canEvaluatePolicy が成功した場合のみであることに注意してください。

于 2015-08-13T04:49:56.057 に答える
11

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

    }

フィンガープリントを追加または削除するたびに、ドメインの状態が変化します。更新するには電話canEvaluatePolicyする必要があります。evaluatedPolicyDomainState

于 2016-07-15T15:20:54.210 に答える
5

要するに; 番号。

もう少し詳しく; フレームワークは、LocalAuthentication厳重に保護されたブラック ボックスです。そこから得られる情報は非常に限られています。それとのやり取りは次のようになります。

  • 何らかのタイプのポリシーで認証できるかどうかを確認します (執筆時点で利用できるのは 1 つだけです - バイオメトリクス (Touch ID))。
  • できれば実際にやってもらう
  • システムが実際の認証を引き継ぐ
  • 認証が成功したかどうかがわかります (そうでない場合は、その理由がわかります)。

実際の認証プロセス (たとえば、どの指が使用されたかなど) の概念はありません。もちろん、これは設計によるものです。Apple は、お客様がそのような情報にアクセスできるようにすることを望んでおらず、その必要もありません。

于 2014-10-22T09:07:31.273 に答える