我正在Node中构建一个Web,该Web使用公共数据库上的CloudKit使用存储在iCloud中的数据。为了查询数据,我创建了一个apiToken
和一个serverToServerKey
。对于第一个,我有一个字符串,但是对于服务器到服务器的身份验证,我有一个pem
文件,其中包含一个私钥。要配置CloudKit,我需要执行以下操作:
CloudKit.configure({
services: {
fetch: fetch
},
containers: [{
containerIdentifier: 'iCloud.com.myName.Container',
environment: "production",
apiTokenAuth: {
apiToken: "XXXXXXXXXXXXXXXXXX",
persist: true
},
serverToServerKeyAuth: {
keyID: serverKey,
privateKeyFile: "./private_key.pem"
}
}]
});
var container = CloudKit.getDefaultContainer();
container.setUpAuth().then(function(userIdentity) {
if(userIdentity) {
publicDB = container.publicCloudDatabase;
console.log("[OK] Logged in...");
resolve(userIdentity)
}
});
这显然不会产生任何问题,我可以查询容器中的数据,并且我的Web应用程序在本地没有问题。
上一个代码段位于我的index.js
文件中,当我从iCloud中获取数据时,将其传递到HTML文件中,然后使用EJS进行渲染。
现在,我将其转移到生产环境中,并且遇到一些问题。据我所知,我无法将.pem
文件移动到服务器,因为它包含私钥,但是现在它在后端,所以我不知道它是否将公开可用。
是否可以仅使用apiToken
对使用我的Web应用程序的用户进行身份验证。用户将只需要读取数据而无需修改或创建,因此我不需要识别它们。
我问的是不可能完成的事情,还是有人做了?我尚未找到任何有关此的信息。当我尝试仅使用apiTokenAuth
并使用先前的代码段对用户进行身份验证并删除serverToServerKeyAuth
时,就会得到AUTHENTICATION_ERROR
。