【问题标题】:CloudKitJS Server to Server ConfigureCloudKitJS 服务器到服务器配置
【发布时间】:2016-07-15 03:27:34
【问题描述】:

我无法让它工作。我不断收到以下错误:

[Error: No key provided to sign]

这是我的配置代码:

CloudKit.configure({
  services: {
    fetch: fetch
  },
  containers: [{
    containerIdentifier: 'iCloud.io.shakd.Command-Center',
    environment: 'development',
    serverToServerKeyAuth: {
        keyID: "MyKeyId",
        privateKeyFile: "./eckey.pem",
        privateKeyPassPhrase: "MyPassPhrase"
    }

  }]
})

另外,什么是 privateKeyPassPhrase?是终端生成的代码吗?

【问题讨论】:

    标签: javascript node.js cloudkit cloudkit-web-services


    【解决方案1】:

    Apple 在CloudKit Catalog: An Introduction to CloudKit (Cocoa and JavaScript) 的示例代码显示privateKeyFile 所需的语法是将__dirname(执行节点脚本的目录)添加到eckey.pem 文件中。来自config.js

    serverToServerKeyAuth: {
        keyID: '<insert key ID>',
        privateKeyFile: __dirname + '/eckey.pem'
    }
    

    第二条关键信息是,在配置 CloudKit 之后,您必须使用 setUpAuth() 显式登录。来自index.js

    var container = CloudKit.getDefaultContainer();
    var database = container.publicCloudDatabase; // We'll only make calls to the public database.
    
    // Sign in using the keyID and public key file.
    container.setUpAuth().then(function (userInfo) {
        println("userInfo", userInfo);
        return database.performQuery({ recordType: 'Test' });
    }).then(function (response) {
        println("Queried Records", response.records);
    }).catch(function (error) {
        console.warn(error);
    });
    

    在我的 JavaScript 代码中进行这两项更改后,我的脚本已通过身份验证,可以读取和写入我的 CloudKit 数据库。

    【讨论】:

    • 我需要做的就是调用 container.setUpAuth();
    【解决方案2】:

    仅当您的 privateKeyFile 使用密码短语加密时,您才需要 privateKeyPassPhrase。

    错误

    [Error: No key provided to sign] 
    

    直接来自节点的加密模块。

    您的 eckey.pem 文件似乎不包含私钥。 您可以尝试以下方法进行验证:

    var fs = require('fs');
    var crypto = require('crypto');
    var privateKey = fs.readFileSync('./eckey.pem', 'utf8');
    var signer = crypto.createSign('RSA-SHA256');
    signer.update('message');
    console.log(signer.sign(privateKey, 'base64'));
    

    如果可行,那么您的配置应该是:

    CloudKit.configure({
      services: {
        fetch: fetch
      },
      containers: [{
        containerIdentifier: 'iCloud.io.shakd.Command-Center',
        environment: 'development',
        serverToServerKeyAuth: {
            //that looks suspicious, please use the real keyID
            keyID: "MyKeyId",
            privateKeyFile: "./eckey.pem"
        }
      }]
    })
    

    【讨论】:

    • “如果可行”是什么意思?谢谢。我得到了一些加密的输出,但仍然得到错误没有提供密钥来签名。
    猜你喜欢
    • 2013-06-13
    • 2016-05-20
    • 2010-09-18
    • 2015-02-19
    • 2016-05-27
    • 2016-11-09
    • 2017-05-12
    • 2014-10-22
    • 1970-01-01
    相关资源
    最近更新 更多