- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已使用 SecKeyCreateRandomKey
在钥匙串(keychain)中创建了私钥。当我尝试访问 key 以执行签名操作时,Touch ID 或 FaceID 对话框永远不会出现。我得到了符号字符串,但没有 TouchID 或 FaceID。我尝试使用 BiometryAny
和 TouchIdAny
但它不起作用。
static func createKey(keyName:String){
DispatchQueue.main.async{
var error : Unmanaged<CFError>?
print("Key is generating for \(keyName)")
let tag = (keyName + "PrivateKey").data(using: .utf8)!
// private key parameters
var privateKeyParams: [String: Any] = [:]
let accessControlError:UnsafeMutablePointer<Unmanaged<CFError>?>? = nil
// ^ Already a 'pointer'
if #available(iOS 10 , *) {
let allocator:CFAllocator! = kCFAllocatorDefault
let protection:AnyObject! = kSecAttrAccessibleWhenUnlockedThisDeviceOnly
let flags:SecAccessControlCreateFlags = SecAccessControlCreateFlags.userPresence
let accessControlRef = SecAccessControlCreateWithFlags(
allocator,
protection,
flags,
accessControlError // <- Notice the lack of '&'
)
privateKeyParams = [
kSecAttrIsPermanent as String: true,
kSecAttrApplicationTag as String: tag,
kSecAttrAccessControl as String : accessControlRef!,
]
} else {
// Fallback on earlier versions
}
// global parameters for our key generation
let parameters: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits as String: 2048,
kSecPrivateKeyAttrs as String: privateKeyParams
]
if #available(iOS 10.0, *) {
do{
guard let privateKey = SecKeyCreateRandomKey(parameters as CFDictionary, nil) else {
print("\(keyName)PrivateKey generator Error!")
throw error!.takeRetainedValue() as Error
}
}
}
}
和签名函数:
static func SigntureWithPrivateKey(keyName: String, message : String) -> String {
//print("sign started .........")
guard let messageData = message.data(using: String.Encoding.utf8) else {
print("bad message to sign")
return ""
}
if #available(iOS 10.0, *) {
guard let privateKeyLocal: SecKey = getPrivateKey("\(keyName)PrivateKey") else
{
return ""
}
guard let signData = SecKeyCreateSignature(privateKeyLocal,SecKeyAlgorithm.rsaSignatureDigestPKCS1v15SHA512,messageData as CFData, nil) else {
print("priv ECC error signing")
return ""
}
let convertedSignData = signData as Data
let convertedString = convertedSignData.base64EncodedString()
return convertedString
} else {
return ""
}
}
和 getPrivateKey 函数:
fileprivate static func getPrivateKey(_ name: String) -> SecKey?
{
let query: [String: Any] = [
kSecClass as String: kSecClassKey,
kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
kSecAttrApplicationTag as String: name,
kSecReturnRef as String: true
]
var item: CFTypeRef? = nil
let status = SecItemCopyMatching(query as CFDictionary, &item)
guard status == errSecSuccess else
{
if status == errSecUserCanceled
{
print("\tError: Accessing private key failed: The user cancelled (%@).", "\(status)")
}
else if status == errSecDuplicateItem
{
print("\tError: The specified item already exists in the keychain (%@).", "\(status)")
}
else if status == errSecItemNotFound
{
print("\tError: The specified item could not be found in the keychain (%@).", "\(status)")
}
else if status == errSecInvalidItemRef
{
print("\tError: The specified item is no longer valid. It may have been deleted from the keychain (%@).", "\(status)")
}
else
{
print("\tError: Accessing private key failed (%@).", "\(status)")
}
return nil
}
return (item as! SecKey)
}
最佳答案
抱歉,您的问题很长,所以我想我会给出通用答案。
确保您已在您的信息.plist
如果没有此 key ,系统将不允许您的应用使用 Face ID。这该键的值是系统呈现给用户的字符串您的应用第一次尝试使用 Face ID 时。该字符串应该清楚地解释为什么您的应用程序需要访问此身份验证机制。系统不需要可比的使用描述用于触摸 ID。
确保您已添加安全性和本地身份验证除了开启钥匙串(keychain)服务之外的框架
您必须专门设置身份验证参数SecAccessControlCreateWithFlags 类(请清楚地看一遍,它有很多区别)
请在此处查找更多信息以及示例源代码
希望这有帮助。
关于ios - 使用私钥和 TouchID 或 FaceID swift 对消息进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56629494/
我正在创建一个应用程序,用户必须登录并可以使用 FaceID 或 TouchID 来加快登录过程。 可以在应用程序的内部设置中启用或禁用使用 FaceID 或 TouchID 登录。 首次使用 Tou
我想获取设备中当前使用的锁类型的字符串,无论是 FaceID、touchID 还是 PassCode。下面是我的代码:- func getBiometricType() -> String {
当点击按钮时我添加了人脸识别和如果为真,需要导航到另一个页面。但没有工作。应用程序崩溃。几分钟后导航到下一页,后退按钮不起作用。 @IBAction func myProfile(_ sender:
我已经在 View Controller 上实现了密码/TouchID/FaceID,当我遇到成功案例时,我希望提示停止触发,但它只是一遍又一遍地触发。 在我的 VC 中: var context:
Sorry, unavailability of iPhone-X. 在 iPhone-X 推出后,每个人都希望他们的应用程序应该兼容 iOS11 和 touchID,但问题是开发人员测试 touch
现在问有点早,但我计划专门为 FaceID 添加功能,所以在此之前我需要验证设备是否支持 FaceID?需要建议和帮助。提前致谢。 最佳答案 Objective-C 版本 - (BOOL) isFac
我在实现 TouchID/FaceID 身份验证时遇到问题,它会在用户打开应用程序时自动提示用户。我正在为 TouchID/FaceID 使用 local_auth 依赖项。 在下面的代码中,应用程序
我每天都必须转到“菜单”->“硬件”->“面容 ID”/“触控 ID”->“已注册”并进行选择。我只想让我的模拟器保持注册状态。 最佳答案 目前没有。请在 https://bugreport.appl
我在我的应用程序上实现了面部 ID 身份验证,用户在点击按钮时获得身份验证。我还实现了一个将用户注销的注销方法: dismiss(animated: true, completion: { UserD
当我实现 FaceID 时,我在 Info.plist 上设置了 FaceID Usage Description,因此,每当用户第一次尝试使用 FaceID 时,iOS 都会显示询问 FaceID
我有一个需要非常安全的应用程序。因此,将应用置于前台的用户需要通过 TouchID、FaceID 或他们的手 secret 码验证自己才能继续。 我能够显示和删除 coverVC,但是在我的 Back
我想知道当用户从应用程序的设置中禁用它们时,我想知道如何调用 iOS 来显示从苹果弹出的警报,让应用程序访问 Face ID/Touch ID。我知道这是放在信息 plist 中的,但是当我从设置中禁
iPhone X 即将面世,引入了 FaceID 来解锁手机和进行 Apple Pay。 我们可以访问 API 吗? 我知道上次我们必须等到 TouchID 发布给开发人员。 大概什么时候有日期线?
我运行的是最新的 Xcode 9 GM(2017 年 9 月 13 日),并在模拟器中设置了Hardware > Face ID > Enrolled 以及 Deployment Target 11.
我有一个用于 FaceID/TouchID 的生物识别技术,只要应用程序进入后台,它就会事件。我已经将应用程序配置为在后台播放音频,但 FaceID/TouchID 似乎停止了所有后台事件,例如音频。
我已使用 SecKeyCreateRandomKey 在钥匙串(keychain)中创建了私钥。当我尝试访问 key 以执行签名操作时,Touch ID 或 FaceID 对话框永远不会出现。我得到了
我正在尝试通过 FaceID 解锁钥匙串(keychain)/安全区域中的数据,并使其在用户 session 期间可访问(无需额外解锁)。 Per the documentation for kSec
是否可以使用 iphone X faceID 数据创建用户面部的 3D 模型?如果是的话,你能告诉我我应该看哪里吗?我真的找不到与此相关的东西。我在 WWDC 上找到了一个关于真实深度和 ARKit
在我的应用程序中,我使用 Apple 的 FaceID 来确认某些操作。 我想在 FaceID 请求出现之前插入一个额外的步骤。这是因为 FaceID 会立即出现,而用户没有时间阅读他要确认的内容。
我正在尝试在我的 React Native 项目中实现 Face ID。 ... import * as LocalAuthentication from 'expo-local-authentica
我是一名优秀的程序员,十分优秀!