Xamarin.iOS绑定库无法使用安全框架中的SecKey API
我从objective-c框架创建了一个绑定库。它可以工作,但不能在安全框架中使用SecKey的加密api。库将其用于api请求。Xamarin.iOS是否不完全支持安全框架?或者,当绑定库使用它时,它是否不起作用 注意:顺便说一句,我在本机框架中添加了这一行作为依赖项:Xamarin.iOS绑定库无法使用安全框架中的SecKey API,ios,security,xamarin,xamarin.ios,xamarin-binding,Ios,Security,Xamarin,Xamarin.ios,Xamarin Binding,我从objective-c框架创建了一个绑定库。它可以工作,但不能在安全框架中使用SecKey的加密api。库将其用于api请求。Xamarin.iOS是否不完全支持安全框架?或者,当绑定库使用它时,它是否不起作用 注意:顺便说一句,我在本机框架中添加了这一行作为依赖项: <Frameworks>Foundation CFNetwork CoreFoundation Security</Frameworks> 更新2: 当我使用XCode运行框架时,会出现以下行,但不
<Frameworks>Foundation CFNetwork CoreFoundation Security</Frameworks>
更新2:
当我使用XCode运行框架时,会出现以下行,但不会出现在我的Xamarin.iOS应用程序中
inserted <keys,kcls=0,klbl=,atag=5253415574696C5F5075624B6579,
crtr=0,type=42,bsiz=0,esiz=0,sdat=2001-01-01 00:00:00 +0000,
edat=2001-01-01 00:00:00+0000,agrp=A7PT8PDBPQ.com.test.app,sync=0,
musr=,|otherAttr,tomb=0,rowid=9,cdat=2020-11-07 11:02:34 +0000,mdat=2020-11-07 11:02:34+0000,pdmn=ak,
sha1=24BB5BBEE125D6A051E08EA2CB72469A0C62042F,v_Data=<?>,
UUID=********-****-****-****-************,
persistref=,clip=0> from <SecDbConnection rw open>
插入,accc=310C300A0C0470726F740C02616B,
UUID=*********-******-******-***-***-******-**************,
persistref=,clip=0>来自
所以我会回答我自己的问题,因为我找到了解决方案。问题背后的原因是SecKeyRef使用KeyChain访问读取和写入密钥,如官方文档中所述: 一个SecKeyRef实例,表示存储在 keychain可以安全地转换为SecKeychainItemRef进行操作 作为一个钥匙链项目。另一方面,如果钥匙未存储在 keychain,将对象强制转换为SecKeychainItemRef并将其传递给 Keychain服务函数返回错误 在Xcode中使用SecKeyRef的配置文件并不重要,但在Visual Studio Mac中,需要使用authorigents.plist来启用密钥链访问。所以,如果您的绑定库使用了SecKey API,则需要在authorights.plist中启用KeyChain访问,并在project中设置apple developer帐户
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.company.yourapp</string>
</array>
钥匙链访问组
$(AppIdentifierPrefix)com.company.yourapp
您究竟要调用哪些安全框架方法?在库中,它们从服务器获取公钥并将其设置为SecKeyRef,然后,用这个SecKeyRef
加密它,在Xamarin.iOS中就是IntPtr
,并且SecKeyCreateEncryptedData
入口点被定义为DllImport
,因为它是一个C
调用()Xamarin已经创建了名为CreateEncryptedData
,CreateDecryptedData
的包装方法,等等。。。为了使这些本机C调用更易于使用(它们都是在我链接的Security/Certificate.cs
文件中定义的。好的,但是,为什么库不能使用它?您阅读了错误消息吗?它明确表示您缺少权限。感谢分享。不要忘记接受答案
deleted
<keys,kcls=0,klbl=,atag=5253415574696C5F5075624B6579,crtr=0,type=42,
bsi=,esiz=0,sdat=2001-01-01 00:00:00 +0000,edat=2001-01-01 00:00:00
+0000,agrp=A7PT8PDBPQ.com.test.app,sync=0,musr=,
|otherAttr,tomb=0,rowid=7,cdat=2020-11-07 11:01:55
+0000,mdat=2020-11-07 11:01:55 +0000,pdmn=ak,
sha1=F1A9A4EC0C5AC67D354C9D7602E118B8DF5EFAF5,
v_Data=<?>,accc=310C300A0C0470726F740C02616B,
UUID=********-****-****-****-************,
persistref=,clip=0> from <SecDbConnection rw open>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.company.yourapp</string>
</array>