Can';t获取CloudKit进行身份验证(使用Javascript和服务器到服务器密钥)
我正在尝试使用苹果的Can';t获取CloudKit进行身份验证(使用Javascript和服务器到服务器密钥),javascript,cloudkit,Javascript,Cloudkit,我正在尝试使用苹果的cloudkit.js文件建立到cloudkit的服务器到服务器连接。然而,尽管配置了几个小时,我还是无法让CloudKit考虑我的请求。 我的配置逻辑非常简单: const privateKeyFile = `${__dirname}/eckey.pem`; const keyID = '*some key ID*'; const config = { containers: [ { containerIdentifier: 'iCloud.com
cloudkit.js
文件建立到cloudkit的服务器到服务器连接。然而,尽管配置了几个小时,我还是无法让CloudKit考虑我的请求。
我的配置逻辑非常简单:
const privateKeyFile = `${__dirname}/eckey.pem`;
const keyID = '*some key ID*';
const config = {
containers: [
{
containerIdentifier: 'iCloud.com.*someNameSpace.someProject*',
environment: 'development',
serverToServerKeyAuth: { keyID, privateKeyFile },
},
],
services: {
fetch,
},
};
CloudKit.configure(config);
const container = CloudKit.getDefaultContainer();
container.setUpAuth();
但是,最终的容器.setUpAuth()代码>总是导致{“uuid”:“*某些uuid*”,“serverErrorCode”:“身份验证失败”,“原因”:“未找到身份验证方法”
我甚至尝试在cloudkit.js
内部添加console.log
行,以记录发送到cloudkit的内容,它似乎有正确的标题:
_host: 'https://api.apple-cloudkit.com',
_path: '',
_params: { ckjsBuildVersion: '17AProjectDev77', ckjsVersion: '1.2.0' },
_headers:
{ 'content-type': 'text/plain',
'X-Apple-CloudKit-Request-ISO8601Date': '2017-03-03T00:52:48Z',
'X-Apple-CloudKit-Request-KeyID': '*my key*',
'X-Apple-CloudKit-Request-SignatureV1': '*what looks like a valid signature*' },
_body: undefined,
_method: 'GET',
_wsApiVersion: 1,
_containerIdentifier: '*my container identifier*',
_containerEnvironment: 'development',
_databaseName: 'public',
_apiModuleName: 'database',
_responseClass: [Function: a],
_apiEntityName: 'users',
_apiAction: 'current' }
我花了好几个小时去摸索(minnified)cloudkit.js
文件,但我仍然不知道为什么事情不能正常工作。如果有任何帮助,哪怕只是调试想法,都将不胜感激
另外,我确信我可以访问CloudKit容器,因为当我转到https://icloud.developer.apple.com/dashboard/
它在URL中https://icloud.developer.apple.com/dashboard/#*支原体*
显然有两种(或更多?)cloudkit.js的版本
。因为苹果刻意避免像地球上其他公司一样使用NPM(即使他们在cloudkit说明中使用NPM),而且由于服务器到服务器CloudKit连接的文档是事后才想到的,所以当您真正想要节点版本时,很容易就得到web版本。而且(除非您非常擅长阅读精简代码),仅仅通过查看它是无法判断的
事实证明,我以某种方式获得了以web为中心的cloudkit.js
,我需要以节点为中心的版本。在重复列出的过程后,我获得了该版本,并最终能够使我的cloudkit代码正常工作
这个故事的寓意是:如果提供API库的公司太愚蠢/傲慢/无论什么都不能像其他人一样使用npm
,那么你必须非常小心,不要开枪打中自己的脚。确保你遵守了上面链接的特定于节点的说明。这对我解决了一个类似的问题有所帮助,因为我不知道CloudKitJS的第二个版本不是升级,至少在阅读了苹果文档的链接后,我是这么认为的。从
切换回
,它解决了我的问题。我已经为此奋斗了好几天,几乎放弃了。下载您指出的示例,并获得正确的CloudKit JS版本非常有帮助呃,很有帮助。我还发现了一行微妙但非常重要的代码:process.env.NODE\u TLS\u REJECT\u UNAUTHORIZED=“0”
我的服务器拒绝了所有请求,但没有。非常感谢!是的,它只适用于ClouKit JS的第1版,但即使在公共数据库上也要求进行身份验证。我仍然收到下面的错误,但它现在正在工作。有人知道如何解决它吗?在console工具上扩展错误消息后,它显示了一个带有重定向URL的对象和uuid..“XML解析错误:格式不正确的位置:…311194DEE13…a706行号1,第1列:”