Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.iOS绑定库无法使用安全框架中的SecKey API_Ios_Security_Xamarin_Xamarin.ios_Xamarin Binding - Fatal编程技术网

Xamarin.iOS绑定库无法使用安全框架中的SecKey API

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运行框架时,会出现以下行,但不

我从objective-c框架创建了一个绑定库。它可以工作,但不能在安全框架中使用SecKey的加密api。库将其用于api请求。Xamarin.iOS是否不完全支持安全框架?或者,当绑定库使用它时,它是否不起作用

注意:顺便说一句,我在本机框架中添加了这一行作为依赖项:

 <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>