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列:”