如何正确使用SecRecord(KeyChain)?
How to correctly use SecRecord (KeyChain)?
所以我有一些我最初从 Xamarin.Auth 获取的代码,用于在设备上存储敏感数据,例如密码:
var record = new SecRecord(SecKind.GenericPassword);
record.Service = "MyServiceId"
record.Generic = NSData.FromString(value, NSStringEncoding.UTF8); ;
record.Accessible = SecAccessible.WhenUnlocked;
statusCode = SecKeyChain.Add(record);
我猜存储的数据是用 SecKind.GenericPassword
加密的。但是这个密码是如何生成的,这个值又存储在哪里。 Xamarin documentation 非常稀疏,只是说:
The SecRecord stores a password.
谁可以访问我存储的 value
,这是使用 KeyStore
的正确方法吗?
为了限制此记录的访问方式,您可以在创建记录时使用 AccessControl
属性 而不是 Accessible
:
record.AccessControl = new SecAccessControl(
SecAccessible.WhenUnlocked,
SecAccessControlCreateFlags.UserPresence);
请参阅:https://developer.xamarin.com/api/type/Security.SecAccessControlCreateFlags/ 了解您可以申请的更多标志。
SecKind
只是您要存储的记录类型。谁创建密码并不重要,它可以是您的应用程序,也可以是您从 API 或其他任何地方获得的东西。
也可以参考苹果官方文档:https://developer.apple.com/documentation/security/keychain_services/keychain_items
所以我有一些我最初从 Xamarin.Auth 获取的代码,用于在设备上存储敏感数据,例如密码:
var record = new SecRecord(SecKind.GenericPassword);
record.Service = "MyServiceId"
record.Generic = NSData.FromString(value, NSStringEncoding.UTF8); ;
record.Accessible = SecAccessible.WhenUnlocked;
statusCode = SecKeyChain.Add(record);
我猜存储的数据是用 SecKind.GenericPassword
加密的。但是这个密码是如何生成的,这个值又存储在哪里。 Xamarin documentation 非常稀疏,只是说:
The SecRecord stores a password.
谁可以访问我存储的 value
,这是使用 KeyStore
的正确方法吗?
为了限制此记录的访问方式,您可以在创建记录时使用 AccessControl
属性 而不是 Accessible
:
record.AccessControl = new SecAccessControl(
SecAccessible.WhenUnlocked,
SecAccessControlCreateFlags.UserPresence);
请参阅:https://developer.xamarin.com/api/type/Security.SecAccessControlCreateFlags/ 了解您可以申请的更多标志。
SecKind
只是您要存储的记录类型。谁创建密码并不重要,它可以是您的应用程序,也可以是您从 API 或其他任何地方获得的东西。
也可以参考苹果官方文档:https://developer.apple.com/documentation/security/keychain_services/keychain_items