3

これを機能させるのに問題があります。次のエラーが発生し続けます。

[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 とは何ですか? ターミナルで生成されたコードですか?

4

2 に答える 2

3

CloudKit Catalog: An Introduction to CloudKit (Cocoa and JavaScript)にあるApple のサンプル コードは、必要な構文がprivateKeyFile(__dirname実行中の Node スクリプトのディレクトリ) をeckey.pemファイルに追加することであることを示しています。からconfig.js:

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

2 番目に重要な情報は、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 コードにこれら 2 つの変更を加えた後、スクリプトは CloudKit データベースの読み取りと書き込みに対して認証されました。

于 2016-08-18T04:23:32.313 に答える
1

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"
    }
  }]
})
于 2016-04-19T22:20:14.297 に答える